【问题标题】:Removing uninstall entry without removing the app in Squirrel.Windows installer删除卸载条目而不删除 Squirrel.Windows 安装程序中的应用程序
【发布时间】:2017-11-09 00:27:29
【问题描述】:

我在 MSI 安装程序中使用 Squirrel 安装程序。 MSI 安装程序调用 Squirrel 安装程序。由于 MSI 安装程序将在添加/删除程序中有条目,我想删除(或不创建)由 Squirrel 安装程序创建的条目。

我所做的是在onFirstRun 的事件处理程序中使用RemoveUninstallerRegistryEntry,但它给了我以下错误:

Couldn't write uninstall icon, don't care: System.IO.IOException: Illegal operation attempted on a registry key that has been marked for deletion.

基于这个错误,我觉得我在错误的地方删除了卸载程序条目。删除卸载条目的地方应该是什么?或者有没有办法阻止 Squirrel 首先创建这些条目?

【问题讨论】:

  • 当我在安装程序中使用-s 标志时,它会继续创建卸载程序条目,因为它没有运行第一次安装。

标签: windows-installer squirrel.windows


【解决方案1】:

IMO,您正在创建“木马”MSI。您可以在 MSI 中设置 ARPSYSTEMCOMPONENT 属性,它不会显示在添加删除程序中。但老实说,您可能根本不希望 MSI 自己向系统注册。在这种情况下,请从安装程序中删除某些关键标准操作,例如 PublishComponents、PublishFeatures 和 PublishProduct。

【讨论】:

  • 我不是在创建木马 MSI,尽管内部安装程序 (Squirrel) 可以被视为木马。我不想隐藏 MSI 条目。我试图隐藏内部安装程序的卸载程序条目,因为此内部安装程序的卸载命令将由 MSI 卸载程序调用。我只是想通过为 1 次安装设置 2 个条目来减少用户的困惑。
  • 这是木马MSI的定义。内部安装程序是希腊人。见:blogs.msdn.microsoft.com/robmen/2006/02/01/…
  • 如果您真的希望 MSI 在添加删除程序中的条目,以便 MSI 可以调用卸载并反过来调用松鼠卸载,那么这根本不是 MSI 问题。 MSI 的行为符合预期。这是你必须压制的松鼠。出于好奇,您的 MSI 是每个用户还是每台机器?你的松鼠安装器是一样的还是不一样的?
  • 是的。根据该定义,它将是特洛伊木马。但是,我认为 Windows Installer 标记导致将其标记为 MSI 问题,但事实并非如此。我将删除该标签。它本质上是一个 Squirrel.Windows 问题。并且这两种安装都是用户范围的,Squirrel 用于为自动升级提供快速解决方案。
【解决方案2】:

无论您是否应该这样做,您都可以修改 Squirrel,使其永远不会创建注册表项。只需注释掉对 CreateUninstallerRegistryEntry 的调用或注释掉 this file 中的函数即可。 只需重建 squirrel 并将 nuget 中的引用替换为您的自定义版本,这很容易。
只要您使用应用程序的大部分来引导 squirrel,我认为这样做没有任何问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-12
    • 2014-09-27
    • 2021-05-19
    • 2016-07-24
    • 2017-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多