我漏掉了一些显而易见的东西。我正在使用DJGPP C编译器。我可以成功地打开可执行文件,但不能打开默认程序中的文件。
#include <stdio.h>
int main(void) {
char sys_cmd[100] = "C:\\WINDOWS\\system32\\Calc.exe";
system(sys_cmd);
system("\"C:\\TextFile.txt\"");
system("\"www.bbc.co.uk\"");
getch();
return 0;
}运行此代码将导致计算器启动。关闭计算器后,它报告:
Bad command of file name
Bad command of file name 另外两个系统调用也有问题。我尝试过在系统调用中添加"START“,但这并不能解决这个问题。刚刚搜索了我的Windows7Pro系统,它没有一个START.EXE。添加"cmd.exe“只是启动cmd,所以好像没有发送任何参数。
我可以正常地在cmd中输入"C:\TextFile.txt“,它将打开notepad.exe,并在其中打开TextFile.txt。
理想情况下,我应该使用比system()更安全的方法来完成这个任务,但是我还没有在DJGPP中看到任何ShellExecute的例子。
发布于 2015-07-05 13:04:49
您不会在djgpp中找到ShellExecute,因为它只是DOS,不创建真正的Windows应用程序,因此无法访问windows调用。
ShellExecute将能够使用Windows注册表来查找打开某个文件扩展名时需要使用的应用程序。
我不知道exec()能否做到这一点,但我有疑问。
对于非常旧的版本,存在一个允许从djgpp编译的程序调用windows的交叉编译器。但是,由于这是基于编译器的2.9版本:6.html,所以可以认为这是一个死胡同。
如下面的注释所述,您可以插入从.txt到记事本的静态映射。如果您必须支持许多扩展,您基本上有两个选择:
请注意,djgpp已经相当过时,并且没有收到Gcc所做的相同的更新。
"hack“是从您的C程序创建一个临时的.cmd或.bat,并将您需要的文件委托给该批处理。
https://stackoverflow.com/questions/31230386
复制相似问题