【问题标题】:How do I get my Installer Application to behave correctly with Windows?如何让我的安装程序应用程序在 Windows 中正常运行?
【发布时间】:2012-01-07 09:42:58
【问题描述】:

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

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

如果一个 Exe 被命名,或者在文件名中包含以下单词,“Setup”,“Build”,“Install”,也许还有其他,那么.. 每当应用程序运行和关闭时,Windows 都会弹出一个 Product Compatibility助手对话框,提示应用程序可能未正确安装。

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

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

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

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

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

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

【问题讨论】:

    标签: delphi installation


    【解决方案1】:

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

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

    对于它的价值,我总是会使用专用安装工具(例如 InnoSetup)构建安装程序。

    【讨论】:

    • 那是一篇很详细的文章!我知道我可以使用 InnoSetup 或类似工具,但我想制作自己的简单安装程序。
    • 我还发现了这个有用的帖子:blogs.msdn.com/b/cjacks/archive/2009/06/18/…
    • 还有这个我短暂注意到的模板停止了兼容性助手的唠叨csi-windows.com/toolkit/manifest-template
    • 我真的希望 Windows 能尽快阻止任何不是使用 Windows Installer 引擎编写的安装程序。 Windows 下的很多麻烦通常是由于安装程序和卸载程序编码错误。 InnoSetup 是一个很好的工具,即使它不使用 Windows Installer 引擎,因为它是由对安装程序非常了解的人编写的,但我相信操作系统应该严格控制安装在它上面的内容以及如何安装. DIY 安装人员今天太危险了。
    • @MadHatter,你如何分发你的应用程序最终取决于开发人员吗?此外,在我什至考虑公开应用程序之前,它必须经过一系列测试,通过安装进行部署是其中之一——在我看来,Windows 阻止自定义安装将是一件坏事。
    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2014-06-06
      • 2010-10-15
      • 1970-01-01
      • 2010-09-08
      • 1970-01-01
      • 2020-08-13
      • 2018-02-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多