如何让我的安装程序应用程序在Windows中正常运行?

时间:2011-11-27 16:58:04

标签: delphi installer

我在Delphi中创建了一个简单的安装程序应用程序,没什么特别的。基本上我将文件包含到Exe中,然后将它们提取到用户指定的路径。

我偶然发现了一个问题,我注意到这适用于任何Windows可执行文件,无论是否是安装程序都无关紧要。

如果命名了Exe,或者在文件名,“安装”,“构建”,“安装”以及其他文件中包含以下单词,那么..每当运行和关闭应用程序时,Windows都会弹出产品兼容性助手对话框,说应用程序可能没有正确安装。

这是一个问题,因为即使我的安装程序中的文件实际已经解压缩,而且在我看来安装程序已经完成了它的工作,Windows正在抱怨它。

我唯一的想法是,Windows必须在执行时检查应用程序的文件名,并在这种情况下将其识别为安装程序。 Windows必须在系统上设置标志或其他内容,然后我的安装程序必须更新此标志以说明安装是否成功?

从IDE调试时,Windows不会抱怨这一点,所以它不能与代码相关,它必须是操作系统 - 这只发生在从Windows启动应用程序时,而不是Delphi。

您可以轻松地尝试此操作,创建应用程序或将其重命名为Setup.exe,运行它然后将其关闭 - 等待几秒钟,然后将显示“产品兼容性助手”对话框。

我不知道从哪里开始调查如何停止此对话框,或者设置可能告诉Windows安装程序是否已正确完成。

感谢您的想法和解决方案。

2 个答案:

答案 0 :(得分:8)

如果我没记错,当安装应用程序不包含应用程序清单时会发生这种情况。引入UAC时,MS为安装程序引入了启发式检测,并显示了UAC提升对话框。启发式检查setup.exe,install.exe等名称。简单的解决方案是包含应用程序清单。如果是安装程序,您可能希望使用requireAdministrator设置。

该功能称为安装程序检测,并在here中进行了讨论。

对于它的价值,我总是使用像InnoSetup这样的专用安装工具构建一个安装程序。

答案 1 :(得分:3)

正如大卫指出的那样,MS使用一些模糊逻辑来猜测程序是否是安装程序。我不会依赖于此,因为这仅用于支持旧版安装程序应用程序。

所有新应用程序都应该有一个manifest file,指明它是否需要提升权限。

如果应用程序的清单文件包含requestedExecutionLevel指令,则Windows不会尝试Installer Detection

任何被检测为安装程序但未向注册表的“添加删除程序”部分添加注册表项的程序(HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Uninstall)都会收到消息“此程序可能不会安装正确“。