簡體   English   中英

在64位系統上編譯32位程序並調用64位程序

[英]Compiling 32-bit programs and calling 64-bit programs on 64-bit systems

我的系統是64位。 我有一個程序調用命令“bcdedit.exe”

c ++代碼:

ShellExecuteA(NULL, "open", "cmd.exe", "/c bcdedit.exe /?", NULL, SW_SHOWNORMAL);

我編譯為32位當我運行它“file not find”當我編譯為64位時,運行通過

go go代碼中存在同樣的問題:

cmd := exec.Command("cmd.exe","/c","bcdedit.exe /?")
out, err := cmd.CombinedOutput()
if err != nil {
    fmt.Println(err)
}
fmt.Println(string(out))

我在另一個目錄中找到了“bcdedit.exe”:

C:\\Windows\\WinSxS\\amd64_microsoft-windows-b..iondata-cmdlinetool_31bf3856ad364e35_10.0.17134.471_none_69b0e05efb5a4702\\bcdedit.exe

當我在這個目錄中調用該命令時,所有傳遞的這個目錄在每台PC上都是不同的

如何在每台PC上運行此命令的32位編譯程序

所以你的代碼試圖啟動"bcdedit.exe" 在命令行中,PATH環境中bcdedit.exe的唯一位置是Windows系統目錄c:\\Windows\\System32

當您將代碼編譯為32位並在64位系統上運行時,您的進程的文件系統視圖將會更改。 也就是說, C:\\Windows\\System32的進程視圖被C:\\Windows\\SysWOW64的內容替換 - 其中只有32位DLL和EXE。 但是....此文件夾中沒有32位版本的bcdedit.exe。 (如果要模擬此操作,請運行c:\\ windows \\ syswow64 \\ cmd.exe - 您將無法再在c:\\ windows \\ system32文件夾中找到bcdedit.exe)。

你可能需要這樣的東西: 如何檢索system32或SysWOW64的正確路徑?

格式化ShellExecute函數以直接指定bcdedit.exe和cmd.exe的SysWow64路徑。 或者正如其他人所建議的那樣,只需編譯為64位。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM