是否有现成的解决方案来运行程序(我们称之为launcher.exe
),.exe
文件扩展名是 (扩展很重要) 查找静态配置文件,例如launcher.cfg
,并启动配置文件中指定的另一个程序。
或者也许launcher.exe
会执行launcher.cmd
一些其他可用于传递控制权的脚本。
如果还不够清楚的话,请对要求进行另一种解释:
1.用户或其他程序启动program.exe
2. program.exe
launchesprogram.cmd
是执行的 shell 脚本cmd.exe
重要的是,它launcher.exe
是具有.exe
文件扩展名的程序,它不需要任何命令行参数来启动另一个带有命令行参数的脚本或程序。
答案1
我不知道现成的执行此操作的程序。
我有点空闲时间,所以这里有一个快速的 C++ 程序。
#include <cstdlib>
#include <cstdio>
#include <cstring>
#define COMMAND_PRE "call "
#define COMMAND_POST ".bat"
using namespace std;
int main(int argc, char *argv[]) {
char command[strlen(COMMAND_PRE) + strlen(argv[0]) + strlen(COMMAND_POST) + 1];
strcpy(command, COMMAND_PRE);
strcat(command, argv[0]);
strcat(command, COMMAND_POST);
printf("Running \"%s\"", command);
system(command);
system("pause");
}
当然,诺顿很贴心地称其为高风险,因为system(command);
那行代码只是执行一个.bat
文件。不管怎样,我懒得去寻找一种防病毒安全的方法(而且诺顿的“SONAR”保护经常反应过度)。
命名该程序whatever.exe
,它将运行该文件whatever.exe.bat
。换句话说,它将采用自己的文件名(和路径),附加.bat
到末尾,然后运行它。
你可以从上面的源代码自行编译。我还会提供已编译程序的下载链接这里,但使用时需自担风险——这里没有人对可能发生的情况负责
答案2
我已经找到了替代解决方案,但我认为它不如鲍勃的答案好。
但是,这是一个可行的解决方案,我会将其发布以供将来参考:
.cmd
并且.bat
文件可以编译为.exe
文件(但有一些限制)batch compiler
发现于sf.net/projects/batchcompiler。
这样就可以编写批处理文件
start anotherbatch.cmd /arg1 /arg2
并将其编译为batchfile.exe