gpt4 book ai didi

c - 如何使用c程序运行exe

转载 作者:太空狗 更新时间:2023-10-29 15:10:50 26 4
gpt4 key购买 nike

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

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 XPBorland Turbo C 编译器

请帮忙。

最佳答案

这里至少有两处错误:

  1. 你正在使用 system();
  2. 您正在对路径进行硬编码。

第一个问题,我前段时间写了长篇大论,大家可以看看here ;长话短说,要启动一个进程,你应该使用特定于平台的方式,即在 Windows 上,CreateProcess 或者,如果你想打开一个文件及其关联的应用程序,ShellExecute.

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

虽然 notepad.exe 几乎肯定存在于每个 Windows 安装中,但不清楚您应该在哪里搜索它。从 Windows 3.0 开始,它位于 Windows 目录中,但在 NT 系列中,它通常位于 system32 子目录中。因此,从某些 Windows 版本开始,Microsoft 在 windows 目录和 system32 目录中放置了两个记事本副本(参见 this blog 帖子)。

额外的乐趣:从 Windows Server 2008 开始,Windows 目录中的副本已被删除(link - 顺便说一句,帖子的标题是哪个白痴会硬编码记事本的路径? :D),因此即使 Windows 驻留在 c:\windows 中,您的程序也无法打开 notepad

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

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

关于c - 如何使用c程序运行exe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4705725/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com