C ++ ShellExecute批处理脚本无法识别命令

时间:2016-02-02 20:35:44

标签: c++ windows batch-file

正如标题所示,我试图通过“ShellExecute”函数打开一个.bat文件。

它适用于非常基本的.bat脚本,例如“hello world”脚本,但不适用于包含运行游戏服务器命令的其他脚本。 例如,这是“Killing Floor 1”服务器的批处理脚本:

ucc server KF-Mountainpass.rom?game=KFmod.KFGameType?VACSecured=true?MaxPlayers=6?GamePassword=genrl -log=server.log
PAUSE

请注意,此批处理在手动点击时效果很好,但在通过ShellExecute打开时出现以下错误:

"ucc" is not recognized as an internal or external command, operable program or batch file.

我还测试了其他游戏服务器的其他批处理文件,结果相同。

所以,这是我到目前为止所尝试的一个列表,但没有用:

ShellExecute(NULL, "open", "cmd.exe", "C:\\windows\\system32\\cmd.exe /C C:\\Cartella_Server\\Server_KF1\\System\\KF_Server_Launcher.bat", NULL, SW_SHOW);

ShellExecute(NULL,"open", C:\\Cartella_Server\\Server_KF1\\System\\KF_Server_Launcher.bat", NULL, NULL, SW_SHOW);

ShellExecute(NULL, "open", "cmd.exe", "/C C:\\Cartella_Server\\Server_KF1\\System\\KF_Server_Launcher.bat", NULL, SW_SHOW);

有没有解决方案?

提前感谢您的时间:)

2 个答案:

答案 0 :(得分:0)

最有可能的是,ucc程序与tha启动程序脚本位于同一目录中。因此,当您单击它时它会起作用,因为您当前的目录与文件一致,但是当您运行程序时,您当前的目录是不同的。

解决方案 - 根据https://msdn.microsoft.com/en-us/library/windows/desktop/bb762153(v=vs.85).aspx

在第五个ShellExecute参数中提供正确的目录

答案 1 :(得分:0)

这是因为脚本正在cmd.exe目录中加载

为什么呢?因为您没有填写工作目录字段。

看看ShellExecute的第五个参数: https://msdn.microsoft.com/en-us/library/windows/desktop/bb762153%28v=vs.85%29.aspx