如何使用c prog运行exe

Ujj*_*wal 4 c

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

1.代码:

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

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

2代码:

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

  }
Run Code Online (Sandbox Code Playgroud)

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

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

请帮忙.

Mat*_*lia 14

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

  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目录中的副本(链接 - 顺便说一句,帖子的标题是什么白痴会硬编码到记事本的路径? :D),所以notepad即使Windows ,你的程序也无法打开居住在c:\windows.

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

此外,如果您安装了多个Windows副本(例如Windows 7 64位c:,Windows XP 32位d:)c:\windows可能实际存在,但它可能包含与当前正在执行的Windows不同的Windows副本,因此您将成为notepad从另一个Windows副本打开(如果该副本是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:它将自动使用关联的应用程序打开该文件.


Kum*_*lok 1

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

并做一件事

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


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

虽然不太可能,但是有机会。

谢谢

阿洛克·Kr.