0

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

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

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

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

4

2 回答 2

0

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

于 2017-01-02T16:15:03.183 回答
0

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

于 2017-11-08T16:27:29.110 回答