可执行文件在Win7和On WinXP专业版SP3上有效“不是有效的Win32应用程序(193)”

时间:2014-12-09 11:22:44

标签: windows visual-studio winapi executable access-denied

我有一个可执行文件,由MSVS2013在Windows 7 SP1 32位上编译,带有C运行时静态链接和平台工具集“Visual Studio 2013 - Windows XP(v120_xp)”

它在Win7上完美运行(参见Dependency Walker分析的附件截图)。

enter image description here

无法在WinXP上运行:

enter image description here

以下是个人资料日志:

Starting profile on 12/9/2014 at 2:55:03 AM

Operating System: Microsoft Windows XP Professional (32-bit), version 5.01.2600 Service Pack 3
Program Executable: c:\temp\OCTOPUS.EXE
Program Arguments: 
Starting Directory: C:\Temp\
Search Path: C:\Program Files\ActiveState Komodo Edit 8\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\MATLAB\R2009b\runtime\win32;C:\Program Files\MATLAB\R2009b\bin;C:\VisaPoint\sbperl\perl\bin

Options Selected:
     Simulate ShellExecute by inserting any App Paths directories into the PATH environment variable.
     Log DllMain calls for process attach and process detach messages.
     Log DllMain calls for all other messages, including thread attach and thread detach.
     Hook the process to gather more detailed dependency information.
     Log LoadLibrary function calls.
     Log GetProcAddress function calls.
     Log thread information.
     Use simple thread numbers instead of actual thread IDs.
     Log first chance exceptions.
     Log debug output messages.
     Use full paths when logging file names.
     Log a time stamp with each line of log.
     Automatically open and profile child processes.
--------------------------------------------------------------------------------

00:00:00.000: Failure starting the process. %1 is not a valid Win32 application (193).


  [1]: http://i.stack.imgur.com/m82n6.png
  [2]: http://i.stack.imgur.com/6Yr37.png

2 个答案:

答案 0 :(得分:1)

从VS2012开始,Visual Studio的现代版本使用链接器设置来标记与当前一代Windows兼容的可执行映像。版本6,从Vista开始。 XP和Server2003属于上一代版本5。

您仍然可以使用VS2013构建在XP上运行的程序。但你必须改变设置。右键单击项目“属性”,“常规”。将平台工具集设置更改为v120_xp

有一些后果,您的程序是使用旧版本的Windows SDK构建的。 V7.1,最后一个仍与XP兼容。 C运行时库创建了一组仅在第6代中可用的操作系统调用。它将在没有它们的情况下偶然发生,影响与线程和文化相关的相对较小的细节。这种FUD应该提醒你,仍然承诺支持这样一个古老的操作系统可能不是最好的主意。确保你保持一个正在运行的XP版本,这样你就可以正确地测试和重新编写。请记住,你不能再安装VS了,所以如果你从XP用户那里得到支持电话,那么你往往会得到一个相当沉重的偏头痛。

答案 1 :(得分:-1)

好的,忘记在链接器选项中设置SUBSYSTEM。 这是一个解释链接: https://software.intel.com/en-us/articles/linking-applications-using-visual-studio-2012-to-run-on-windows-xp