7

デフォルトのアプリケーションを使用して、ファイルシステムでPDFファイルを開きたいのですが。どうやってやるの?コマンドラインからpdfファイルのファイル名を書き込むだけで、アプリケーションが開きます(要求されたファイルを使用)。使用しようとするexec.Command()と、エラーが発生します(当然のことながら)exec: "foo.pdf": executable file not found in %PATH%

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)
    }

}
4

3 に答える 3

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

また、それを処理する必要があります。

それでも正しい方法は、ShellExecute()によってエクスポートされたAPI関数の周りにCラッパーを使用することshell32.dllであり、「w32」ライブラリはこのラッパーをすぐに提供するように見えることに注意してください。

于 2012-08-22T15:05:01.783 に答える
3

を起動する必要がありcmd /C start foo.pdfます。これにより、startコマンドで適切な実行可能ファイルを見つけることができます。

cmd := exec.Command("cmd", "/C start path_to_foo.pdf")
于 2012-08-22T13:08:52.637 に答える
0

次のようなファイルを作成します。

//go:generate mkwinsyscall -output zmain.go main.go
//sys shellExecute(hwnd int, oper string, file string, param string, dir string, show int) (err error) = shell32.ShellExecuteW
package main

const sw_shownormal = 1

func main() {
   shellExecute(0, "", "file.pdf", "", "", sw_shownormal)
}

次に、ビルドします。

go mod init pdf
go generate
go mod tidy
go build

https://pkg.go.dev/golang.org/x/sys/windows/mkwinsyscall

于 2021-04-23T02:20:43.740 に答える