安装在Windows 7上解决兼容性问题PCA - “此程序可能没有正确安装”

时间:2011-06-03 19:26:30

标签: winapi visual-c++ windows-7 installation

好吧,我正在使用Visual C ++ 2010 Express和ResEdit 我的midi音序器的SETUP应用程序。

Win32 API,没有MFC,一些自定义窗口和控件类等。

现在我得到了Windows 7,我的dang SETUP程序坏了。

Windows给了我“这个应用程序安装正确吗?”啄。 这意味着我的安装程序出了问题。

我试着弄清楚那可能是什么......

我见过这两个SO线程:

"This program might not have installed correctly"

"This program might not have installed correctly" message in Windows 7 RC

哪些引导我去了这些地方:

http://msdn.microsoft.com/en-us/library/dd371711(VS.85).aspx

http://msdn.microsoft.com/en-us/library/bb756937.aspx

http://msdn.microsoft.com/en-us/library/aa905330.aspx#wvduac_topic3

http://blogs.msdn.com/b/cjacks/archive/2009/06/18/pca-changes-for-windows-7-how-to-tell-us-you-are-not-an-installer-take-2-because-we-changed-the-rules-on-you.aspx

http://community.flexerasoftware.com/archive/index.php?t-189007.html

我使用的注册表项只是标准的卸载点和 文件类型的关联。

SETUP在程序文件\ pianocheater目录中写入一个dat.cfg文件 指向所有应用程序数据的位置。 (只是一个带有路径的文本文件) (以及用于该数据目录中的临时目录的etccfg。)

所以我只是通过SETUP上的programfiles \ pianocheater阅读。

有人能想到为什么Windows不喜欢这种安装吗? 源代码位于http://shazware.com/_etc/SETUP_PIANOCHEATER.cpp 它使用我的窗口库,控制类在精神上与mfc类似。 我也可以发送它的有用部分。

对于设置应用来说,这并不算太糟糕。 对于一个win32的家伙/ gal来说应该是非常有吸引力的。

我可能会因为某些问题而无法使用......:/

哦是的,我应该指出Go()是入口点而不是main()。 DBG()只做OutputDebugString(),似乎都运行得很好。 TStr只是一个很大的字符[MAX_PATH](我不做unicode)

可疑的原因是我在win7 64位,但这是一个32位的应用程序。 我很确定我正在使用注册表正确地用于关联和卸载点。

那么我应该做清楚的xml事情吗? 或者有更正确的做事方式吗?

非常感谢,

...史蒂夫

1 个答案:

答案 0 :(得分:3)

首先,检查该消息是否为误报。您看到的消息旨在使用启发式(可能是错误的!)来确定安装程序是否因Windows Vista / 7兼容性问题而失败。如果您的安装程序实际上与Windows 7 / Vista兼容,那么您需要做的就是添加清单declaring itself compatible。您还需要在清单中添加requestedExecutionLevel entry以请求提升。

如果你的安装程序实际上失败了,那么你应该先修复它。

最后,如果由于启动器可执行文件提前退出或类似错误而显示错误,请考虑通过向启动程序添加相应的清单条目来抑制安装程序检测(您可以使用requestedExecutionLevel asInvoker如果启动器不需要管理访问权限,则requestedExecutionLevel清单条目的存在应为suppress installer detection)。请注意,您应确保使用ShellExecute来调用主安装程序进程,而不是CreateProcess,否则UAC可能无法提升子进程。