[英]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.