如何使用c prog运行exe

我是这个论坛的新手。 我需要一个在Windows中运行exe文件的程序。 谷歌搜索我发现下面的代码:

代码:

#include #include int main() { (void)system("C:\\Windows\\notepad.exe"); return 0; } 

上面的代码在Borland Turbo C中成功编译。但它无法运行记事本。

2代码:

 #include #include void main() { int result ; result=system("C:\\Windows\\notepad.exe"); printf("%d",result); } 

上面的运行代码给出-1作为输出。 为什么我得到-1。

我的操作系统Windows XP Borland Turbo C编译器

请帮忙。

这里至少有两个错误的东西:

  1. 你正在使用system() ;
  2. 你是硬编码的道路。

对于第一个问题,我前段时间已经写了很长的咆哮,你可以在这看一下; 长话短说,要启动一个流程你应该采用特定于平台的方式,即在Windows上, CreateProcess或者,如果你想用它的相关应用程序打开一个文件, ShellExecute

对于第二个问题,你假设(1) c:\windows存在,(2)它是当前运行的windows实例(3)的windows目录, notepad.exe实际存在,(4)它是在这样的目录中。

虽然notepad.exe几乎可以保证在每个Windows安装中都存在,但是不清楚应该在哪里搜索它。 从Windows 3.0开始,它就在Windows目录中,但在NT系列上它曾经停留在system32子目录中。 因此,从某些Windows版本开始,Microsoft将两个记事本副本放在windows目录和system32目录中(参见此博客文章)。

额外的乐趣:从Windows Server 2008中删除了Windows目录中的副本( 链接 – 顺便说一句,post的标题是什么白痴会硬编码到记事本的路径? :D ),所以你的程序将无法打开notepad即使Windows驻留在c:\windows

但这里最大的问题是Windows不能保证安装在c:\windows ; 在Windows XP之前的每个NT系列Windows上,它实际上默认安装在c:\winnt ,所以你的代码在这里会失败。

此外,如果你安装了多个Windows副本(例如c:上的Windows 7 64位, c: Windows XP 32位), c:\windows实际上可能存在,但它可能包含一个不同于Windows的Windows副本当前正在执行,因此您将从另一个Windows副本打开notepad (如果该副本是64位而正在运行的是32位则不会运行)。

如果您在已包含windows目录的磁盘上安装Windows,也可能发生类似的事情; 在这种情况下,安装程序将Windows放在Windows(01)目录(或类似的东西)中,并且c:\windows可能为空。

长话短说:

  1. 避免使用system :除了其他缺陷外,在所有这些情况下,你的应用程序都没有任何线索, notepad没有启动;

  2. 避免硬编码路径: c:\windows不保证存在; 如果需要获取Windows目录的路径,可以展开环境变量%windir% (或%systemroot ),或使用API GetWindowsDirectory ;

  3. 如果您的应用程序位于PATH ,您可以利用这一事实: Windowssystem32目录位于PATH环境变量中,这意味着,如果您只是尝试启动notepad ,则可以避免指定它的完整路径; 另一方面,如果恶意用户将危险的应用程序放在应用程序的工作目录中,您就会暴露自己的漏洞;

  4. 如果要打开文件,请使用ShellExecute :它将自动使用关联的应用程序打开该文件。

查看保存源文件的位置,总是C ++编译器生成两个文件,比如你的源名为“hello.cpp”。这些文件应该在你的源路径中:hello.obj hello.exe < - 你的prgram to distribut

我认为您应该使用新的免费IDE /编译器以获得更好的结果,例如: http ://www.codeblocks.org上的CodeBlocks

按照我的意见,我没有看到代码有任何问题,您是否尝试使用某些标准IDE(如dev-cpp或代码块)运行程序。

做一件事

尝试首先在命令提示符上运行相同的命令并告诉结果。


我还想告诉你进入Windows目录并检查Notepad.exe是否存在。

这不太可能,但有机会。

谢谢

Alok Kr。

可能是你的道路在某种程度上是错误的。 我建议遵循Kumar的建议并尝试在命令提示符下运行它,只是为了看到你正在使用正确的路径。

此外,您可能希望在没有路径的情况下尝试运行notepad.exe。 由于它位于PATH中,您应该只能指定“notepad.exe”。

我不确定记事本是否已存储在Windows目录中。 此代码在WinXP下运行。

 #include #include /* main() returns int, not void. */ int main( void ) { int result ; result=system("C:/Windows/system32/notepad.exe"); printf("%d",result); return 0; } 

使用_wpopen函数(popen的windows版本)
来源: http : //msdn.microsoft.com/en-us/library/96ayss4b.aspx