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



我在Delphi中做了一个简单的安装程序,没什么花哨的。基本上,我将文件包含到Exe中,然后将它们解压缩到用户指定的路径。

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

如果Exe被命名,或者在文件名中包含以下单词,"Setup","Build","Install"和其他,那么..每当应用程序运行并关闭时,Windows都会弹出一个产品兼容性助手对话框,提示应用程序可能没有正确安装。

这是一个问题,因为即使我的安装程序中的文件实际上已经被提取出来,在我看来安装程序已经完成了它的工作,Windows仍然抱怨它。

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

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

你可以尝试这很容易,要么创建一个应用程序或重命名为Setup.exe,运行它,然后关闭它-等待几秒钟,产品兼容性助手对话框将显示。

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

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

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

这个特性被称为安装程序检测,在这里讨论。

无论如何,我总是使用专用的安装工具(例如InnoSetup)来构建安装程序。

正如David指出的那样,MS使用一些模糊逻辑来尝试猜测该程序是否是安装程序。我不会依赖这个,因为这只是为了支持旧的安装程序。

所有新应用程序都应该有一个清单文件,指定它是否需要提升权限。

如果一个应用程序有一个包含requestdexecutionlevel指令的清单文件,那么Windows不会尝试安装程序检测。

任何被检测为安装程序但未在注册表的"添加删除程序"部分添加注册表项的程序(HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionUninstall)将收到"此程序可能未正确安装"的消息。

最新更新