2012-08-22 7 views
6

ausführen Ich möchte eine PDF-Datei im Dateisystem von der Standardanwendung öffnen. Wie kann ich das machen? Von der Kommandozeile schreibe ich einfach den Dateinamen der PDF-Datei und die Anwendung öffnet sich (mit der angeforderten Datei). Wenn ich versuche, exec.Command() zu verwenden, erhalte ich einen Fehler (nicht überraschend) exec: "foo.pdf": executable file not found in %PATH%.Golang: Standardanwendung für eine PDF-Datei unter Windows

package main 

import (
    "log" 
    "os/exec" 
) 

func main() { 
    cmd := exec.Command("foo.pdf") 
    err := cmd.Start() 
    if err != nil { 
     log.Fatal(err) 
    } 
    err = cmd.Wait() 
    if err != nil { 
     log.Fatal(err) 
    } 

} 

Antwort

1

Sie müssen cmd /C start foo.pdf starten. Dadurch kann der Startbefehl die richtige ausführbare Datei für Sie finden.

cmd := exec.Command("cmd", "/C start path_to_foo.pdf") 
+0

Diese Methode funktioniert nicht, wenn der Dateiname Leerzeichen enthält – Carl

+0

Ich denke, das Öffnen eines Dateinamens mit Leerzeichen sollte möglich sein. Siehe http://stackoverflow.com/a/13692919/395461 Aber ich konnte den Befehl nicht ordnungsgemäß in Go ausführen, obwohl es manuell in der Befehlszeile eingegeben würde. – Shannon

11
exec.Command("rundll32.exe", "url.dll,FileProtocolHandler", "path_to_foo.pdf") 

sollte auch damit umgehen.

Beachten Sie, dass nach wie vor der richtige Weg, es zu tun, ist ein C-Wrapper um die ShellExecute() API-Funktion von shell32.dll und die "w32" library scheint exportiert zu verwenden, um diese Wrapper sofort zur Verfügung zu stellen.

+3

Diese Methode funktioniert auch, wenn der Dateiname Leerzeichen enthält – Carl

Verwandte Themen