如何使用c prog运行exe

时间:2011-01-16 13:58:43

标签: c

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

1。 代码:

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

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

2 代码:

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

  }

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

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

请帮忙。

6 个答案:

答案 0 :(得分:13)

这里至少有两件错误的事情:

  1. 您正在使用system();
  2. 你正在硬编码。
  3. 对于第一个问题,我前段时间已经写了很长时间的咆哮,你可以看看它here;长话短说,要开始一个流程,你应该采用特定于平台的方式,即在Windows上CreateProcess,或者,如果你想用它的相关应用程序打开一个文件,ShellExecute

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

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

    额外的乐趣:从Windows Server 2008中删除了Windows目录中的副本(link - 顺便说一下,帖子的标题是什么白痴会硬编码到记事本的路径? :D),因此即使Windows位于notepad,您的程序也无法打开c:\windows

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

    此外,如果您安装了多个Windows副本(例如c:上的Windows 7 64位,d:上的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:它会自动使用关联的应用程序打开该文件。

答案 1 :(得分:2)

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

#include<stdlib.h>
#include<stdio.h>

/* main() returns int, not void. */
int main( void ) {

  int result ;
  result=system("C:/Windows/system32/notepad.exe");
  printf("%d",result);
  return 0;
}

答案 2 :(得分:2)

查看保存源文件的位置,总是C ++编译器生成两个文件,比如你的源名为“hello.cpp” 这些文件应位于源路径中: hello.obj hello.exe&lt; - 您分发的prgram

ALSO

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

答案 3 :(得分:1)

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

做一件事

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


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

这不太可能,但有机会。

由于

Alok Kr。

答案 4 :(得分:1)

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

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

答案 5 :(得分:0)

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