Win7 32位下编写的控制台程序怎么在win7 64位下用system()掉不起来呢?

时间:2021-03-01 03:35:45
Win7 32位下编写的控制台exe程序怎么在win7 64位下用system()函数掉不起来呢?求指教?

我在Win7 64位系统下安装了VS2010,用system()函数也是掉不起来

我是调用的win自身的exe程序,就是修改计算机sid的那个程序

system("C:\\Windows\\System32\\sysprep\\sysprep.exe")

9 个解决方案

#1


system("C:\\Windows\\Syswow64\\sysprep\\sysprep.exe");

在64位Windows下:
64位exe和dll在目录c:\windows\sys tem32目录下;
32位exe和dll在目录c:\windows\sys wow64目录下;

#2


Win7 32位下编写的控制台程序怎么在win7 64位下用system()掉不起来呢?

你pause下 看是不是一样的 

#3


我的运行结果就是楼上的那样,但是把sysprep.exe放在别的目录下就能运行起来,不知道为什么

#4



引用

2楼的,你的C:\\Windows\\Syswow64\\sysprep目录下有sysprep.exe这个可执行程序吗?我的win7 64位下没有,只有一个en-US的文件夹,里面是空的

#5


刚才看了,win7 64位系统它的系统目录确实是C:\\Windows\\Syswow64\\sysprep\\,但是这个目录下没有这个sysprep.exe这个可执行程序,我把sysprep.exe拷贝到C:\\Windows\\Syswow64\\sysprep\\这个目录后,程序被调起来了,这个怎么解决啊

#6


安装sysprep的人或设计sysprep安装程序的人不知道1楼的常识呗。

#7


微软文档是这样说的
您可能在想,"那么系统目录呢?同一个目录不能同时保存 32 位和 64 位版本的系统 DLL(例如,KERNEL32 或 USER32),不是吗"?通过执行可选择的文件系统重定向,WOW64 魔法般地为您解决了这个问题。来自 Win32 进程的文件活动通常转到 System32 目录,而不是在名为 SysWow64 的目录中。在内部,WOW64 会默默地更改这些请求以指向 SysWow64 目录。Win64 系统实际上有两个 \Windows\System32 目录 - 一个用于 x64 二进制文件,另一个用于 Win32 等效文件。
这看上去没什么,但会令人混淆。例如,我在某一点上使用了 32 位命令行提示(我自己并不知道)。当我针对 System32 目录中的 Kernel32.dll 运行 DIR 时,所得到的结果与我在 SysWow64 目录中执行相同操作后所得到的结果完全相同。我绞尽脑汁后才发现,文件系统重定向的工作方式就是这样。也就是说,即使我认为是在 \Windows\System32 目录中工作,但 WOW64 实际上已将调用重定向到 SysWow64 目录。顺便说一下,如果您确实希望从 x64 应用程序访问 32 位 \Windows\System32 目录,则 GetSystemWow64Directory API 会提供正确的路径。请一定阅读 MSDN® 文档,了解完整的信息。

#8


您可能在想,"那么系统目录呢?同一个目录不能同时保存 32 位和 64 位版本的系统 DLL(例如,KERNEL32 或 USER32),不是吗"?通过执行可选择的文件系统重定向,WOW64 魔法般地为您解决了这个问题。来自 Win32 进程的文件活动通常转到 System32 目录,而不是在名为 SysWow64 的目录中。在内部,WOW64 会默默地更改这些请求以指向 SysWow64 目录。Win64 系统实际上有两个 \Windows\System32 目录 - 一个用于 x64 二进制文件,另一个用于 Win32 等效文件。
这看上去没什么,但会令人混淆。例如,我在某一点上使用了 32 位命令行提示(我自己并不知道)。当我针对 System32 目录中的 Kernel32.dll 运行 DIR 时,所得到的结果与我在 SysWow64 目录中执行相同操作后所得到的结果完全相同。我绞尽脑汁后才发现,文件系统重定向的工作方式就是这样。也就是说,即使我认为是在 \Windows\System32 目录中工作,但 WOW64 实际上已将调用重定向到 SysWow64 目录。顺便说一下,如果您确实希望从 x64 应用程序访问 32 位 \Windows\System32 目录,则 GetSystemWow64Directory API 会提供正确的路径。请一定阅读 MSDN® 文档,了解完整的信息。

#9


32位程序只能访问32位里面的目录,即使你调用运行system32下的cmd.exe还是启动的是SysWow64目录下的cmd.exe,你可以查看任务管理器中的名词带上了cmd.exe*32
唯一能解决的方法就是编译成64位的exe,用32位的启动然后用IsWow64Process判断系统是32位还是64位,接着再在64位中启动64位的exe去调用sysprep.exe

#1


system("C:\\Windows\\Syswow64\\sysprep\\sysprep.exe");

在64位Windows下:
64位exe和dll在目录c:\windows\sys tem32目录下;
32位exe和dll在目录c:\windows\sys wow64目录下;

#2


Win7 32位下编写的控制台程序怎么在win7 64位下用system()掉不起来呢?

你pause下 看是不是一样的 

#3


我的运行结果就是楼上的那样,但是把sysprep.exe放在别的目录下就能运行起来,不知道为什么

#4



引用

2楼的,你的C:\\Windows\\Syswow64\\sysprep目录下有sysprep.exe这个可执行程序吗?我的win7 64位下没有,只有一个en-US的文件夹,里面是空的

#5


刚才看了,win7 64位系统它的系统目录确实是C:\\Windows\\Syswow64\\sysprep\\,但是这个目录下没有这个sysprep.exe这个可执行程序,我把sysprep.exe拷贝到C:\\Windows\\Syswow64\\sysprep\\这个目录后,程序被调起来了,这个怎么解决啊

#6


安装sysprep的人或设计sysprep安装程序的人不知道1楼的常识呗。

#7


微软文档是这样说的
您可能在想,"那么系统目录呢?同一个目录不能同时保存 32 位和 64 位版本的系统 DLL(例如,KERNEL32 或 USER32),不是吗"?通过执行可选择的文件系统重定向,WOW64 魔法般地为您解决了这个问题。来自 Win32 进程的文件活动通常转到 System32 目录,而不是在名为 SysWow64 的目录中。在内部,WOW64 会默默地更改这些请求以指向 SysWow64 目录。Win64 系统实际上有两个 \Windows\System32 目录 - 一个用于 x64 二进制文件,另一个用于 Win32 等效文件。
这看上去没什么,但会令人混淆。例如,我在某一点上使用了 32 位命令行提示(我自己并不知道)。当我针对 System32 目录中的 Kernel32.dll 运行 DIR 时,所得到的结果与我在 SysWow64 目录中执行相同操作后所得到的结果完全相同。我绞尽脑汁后才发现,文件系统重定向的工作方式就是这样。也就是说,即使我认为是在 \Windows\System32 目录中工作,但 WOW64 实际上已将调用重定向到 SysWow64 目录。顺便说一下,如果您确实希望从 x64 应用程序访问 32 位 \Windows\System32 目录,则 GetSystemWow64Directory API 会提供正确的路径。请一定阅读 MSDN® 文档,了解完整的信息。

#8


您可能在想,"那么系统目录呢?同一个目录不能同时保存 32 位和 64 位版本的系统 DLL(例如,KERNEL32 或 USER32),不是吗"?通过执行可选择的文件系统重定向,WOW64 魔法般地为您解决了这个问题。来自 Win32 进程的文件活动通常转到 System32 目录,而不是在名为 SysWow64 的目录中。在内部,WOW64 会默默地更改这些请求以指向 SysWow64 目录。Win64 系统实际上有两个 \Windows\System32 目录 - 一个用于 x64 二进制文件,另一个用于 Win32 等效文件。
这看上去没什么,但会令人混淆。例如,我在某一点上使用了 32 位命令行提示(我自己并不知道)。当我针对 System32 目录中的 Kernel32.dll 运行 DIR 时,所得到的结果与我在 SysWow64 目录中执行相同操作后所得到的结果完全相同。我绞尽脑汁后才发现,文件系统重定向的工作方式就是这样。也就是说,即使我认为是在 \Windows\System32 目录中工作,但 WOW64 实际上已将调用重定向到 SysWow64 目录。顺便说一下,如果您确实希望从 x64 应用程序访问 32 位 \Windows\System32 目录,则 GetSystemWow64Directory API 会提供正确的路径。请一定阅读 MSDN® 文档,了解完整的信息。

#9


32位程序只能访问32位里面的目录,即使你调用运行system32下的cmd.exe还是启动的是SysWow64目录下的cmd.exe,你可以查看任务管理器中的名词带上了cmd.exe*32
唯一能解决的方法就是编译成64位的exe,用32位的启动然后用IsWow64Process判断系统是32位还是64位,接着再在64位中启动64位的exe去调用sysprep.exe