好吧,我正在使用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://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事情吗? 或者有更正确的做事方式吗?
非常感谢,
...史蒂夫
答案 0 :(得分:3)
首先,检查该消息是否为误报。您看到的消息旨在使用启发式(可能是错误的!)来确定安装程序是否因Windows Vista / 7兼容性问题而失败。如果您的安装程序实际上与Windows 7 / Vista兼容,那么您需要做的就是添加清单declaring itself compatible。您还需要在清单中添加requestedExecutionLevel
entry以请求提升。
如果你的安装程序实际上失败了,那么你应该先修复它。
最后,如果由于启动器可执行文件提前退出或类似错误而显示错误,请考虑通过向启动程序添加相应的清单条目来抑制安装程序检测(您可以使用requestedExecutionLevel
asInvoker
如果启动器不需要管理访问权限,则requestedExecutionLevel
清单条目的存在应为suppress installer detection)。请注意,您应确保使用ShellExecute
来调用主安装程序进程,而不是CreateProcess
,否则UAC可能无法提升子进程。