簡體   English   中英

無法在C ++中使用shellExecute函數打開.exe

[英]Can not open .exe with shellExecute function in C++

我想在執行另一個c ++程序(稱為B)時打開一個.exe(稱為A),所以我同時執行A和B。

為此,我在B代碼中使用此功能:

HINSTANCE result;

result=ShellExecute(NULL,NULL,"d:\\Users\\bci\\Desktop\\Animation\\bin\\Release\\Animation2.exe",NULL ,NULL,SW_SHOWDEFAULT);

cout << "Result is " <<(int)result <<endl;

結果值為42,並且A無法打開。 我得到的錯誤是這樣的:

Failed to open file "player.png": Unable to open file
Failed to load player spritesheet!

這對應於A代碼的這一部分:

// load texture (spritesheet)
    sf::Texture texture;
    if (!texture.loadFromFile("player.png"))
    {
        std::cout << "Failed to load player spritesheet!" << std::endl;
        return 1;
    }

A和B都使用GCC / G ++編譯器和來自TDM-GCC(版本4.9.2,32位,SJLJ)的GDB調試器作為IDE使用code :: blocks構建。

我在Windows 7 64位(企業和專業,都相同的錯誤)中執行此操作。

另外,我不知道這是否值得一說,但是我正在A中使用SFML庫,如您所見

 sf::Texture texture;

我認為這與從您正在調用的程序打開文件的權限有關,但是我不確定如何解決此問題。

實際上,A和B可以完美地獨立工作,但是B不能以此含義打開A。

我很確定我已經通過右鍵單擊->屬性->安全性選項使該映像不受限制,但是似乎還不夠。

有人可以幫我弄這個嗎?

ShellExecute具有lpDirectory參數,該參數將在調用過程中將Shell的當前工作目錄設置為所需的目錄。

您已將其設置為NULL ,因此當前工作目錄未更改(可能是B的可執行文件的位置,或您創建的其他任何位置)。 程序A使用相對路徑,因此希望player.png在當前工作目錄中; 大概是通過分發實現的,因此實際上可以在A的可執行文件的位置找到該文件,並且僅假定兩者相同。 在這種情況下,它們不是。

只有你可以知道什么是當前的工作目錄應該A ,但基於上述假設,你應該設置lpDirectory"d:\\\\Users\\\\bci\\\\Desktop\\\\Animation\\\\bin\\\\Release\\\\"

程序A正在正確執行。 問題是,當您從程序B中執行Shell時,它與程序B的當前工作目錄一起運行。因此,找不到player.png 您需要編輯程序A以提供player.png的完整路徑,或者需要將player.png復制到與程序B相同的文件夾中。

暫無
暫無

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

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