不能在C++中用.exele函数打开.exe

不能在C++中用.exele函数打开.exe,c++,windows,codeblocks,sfml,shellexecute,C++,Windows,Codeblocks,Sfml,Shellexecute,我想打开.exe,叫它a,当我执行另一个C++程序时,让它调用B,这样我就同时执行了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)re

我想打开.exe,叫它a,当我执行另一个C++程序时,让它调用B,这样我就同时执行了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;
这与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各自可以完美地工作,但B不能用这个意思打开A

我很确定我已经通过右键单击->属性->安全选项使该图像尽可能不受限制,但这似乎还不够


有人能帮我吗?

程序A正在正确执行。问题是,当您从程序B执行shell时,它会使用程序B的当前工作目录运行。因此,它找不到player.png。您需要编辑程序A以提供player.png的完整路径,或者需要将player.png复制到与程序B相同的文件夹中。

ShellExecute有一个lpDirectory参数,用于在调用期间将shell的当前工作目录设置为您想要的任何目录

您已将其设置为NULL,因此当前工作目录未更改,可能是B的可执行文件的位置,或者是您创建的任何其他位置。程序A正在使用相对路径,因此希望player.png位于当前工作目录中;据推测,发行版这样做是为了在A的可执行文件的位置找到文件,并且假设两者相同。在这种情况下,它们不是


只有您才能知道A的当前工作目录应该是什么,但基于上述假设,您应该将lpDirectory设置为d:\\Users\\bci\\Desktop\\Animation\\bin\\Release\。

我希望player.png不在当前目录中。对于A和B,您所说的同时执行是什么意思?此外,请注意,通过ShellExec传递给进程的当前工作目录将不同于父程序的,要验证这一点,只需在程序arg[0]处的路径中写入一个文件,并查看其最终位置,因此加载相对路径可能是罪魁祸首。无论如何,无论您在这里尝试做什么,都可以使用静态库而不是可执行文件来更好地完成。最好使用正确的工作目录来执行ShellExecute,不是吗?而不是用文件副本和硬编码路径进行黑客攻击。提示:有一个lpDirectory参数……好的,我同意-假设提问者真的想要一个工作目录,我怀疑是这样。@SamHolloway:如果他们想要其他目录,他们仍然必须设置:
// load texture (spritesheet)
    sf::Texture texture;
    if (!texture.loadFromFile("player.png"))
    {
        std::cout << "Failed to load player spritesheet!" << std::endl;
        return 1;
    }
 sf::Texture texture;