XXX.exe不是有效的Win32应用程序

时间:2009-06-17 16:19:17

标签: c++ 64-bit windows-server-2008

配置:Windows server 2008 x64。

软件是跨平台的c ++ 64bit。

之前的安装程序默认要求用户安装到

c:\ Program Files(x86)\ company \ version

对于上一个版本,我使用路径覆盖更改了安装程序以安装到

c:\ Program Files \ company \ version

对我们进行测试的人表示,对c:\ Program Files \ sub进程的新安装无法启动。覆盖安装到c:\ Program Files(x86)\ xxx一切正常。转到cmd.exe并从C:\ Program Files \ xxx运行会出现“yyy.exe不是有效的Win32应用程序”错误。同样,这不是c:\ Program Files(x86)的问题。

客户也安装到默认位置并获得相同的错误。

我的build / dev机器没有显示任何这些错误。它运行的服务器2008(和visual studio express)的演示版本永远不会更新,也永远不会重新启动。

在程序文件中添加“x86”有什么特别之处吗?

注:

这在我的开发机器上也不是问题,也是服务器2008 x86_64。

dumbin / headers清楚地表明这些程序是64位。

此时没有答案。 解决方法是只安装到Program Files(x86)或其他地方并完成它。将放入用户不应安装到Program Files的常见问题解答(如果内核发生核,他们会查看常见问题解答)。

这可能是安装程序的问题,它可能是“quack.exe”的经典案例,但应用于“程序文件”。我一般都讨厌窗户,这是有充分理由的。

3 个答案:

答案 0 :(得分:4)

Program Files(x86)目录是安装32位程序的地方。当32位应用程序运行时,%ProgramFiles%环境变量为set到C:\ Program Files(x86)\(默认情况下;这实际上可能位于不同的驱动器上)。

您是否完全确定此程序是否正在编译为64位?

答案 1 :(得分:1)

也许exe在某个特定配置中以某种方式找到32位的dll?例如。当sb设法用32位dll弄乱他的64位目录时。

请记住,启动时也不会加载loadlibrared dll。

答案 2 :(得分:0)

我认为这与应用程序的清单有关。你以某种方式改变了吗?当我在编译器之间来回切换时,我得到了同样的错误。 vc9(vs2008)创建了一个清单,我们在.net 2003上编译时通常不会使用它。