2017-01-01 116 views
0

我在MSI安装程序中使用了Squirrel安装程序。 MSI安装程序调用Squirrel安装程序。由于MSI安装程序将在添加/删除程序中具有条目,因此我想删除(或不创建)由Squirrel安装程序创建的条目。在不删除Squirrel.Windows安装程序中的应用程序的情况下删除卸载条目

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

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创建这些条目?

+0

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

回答

0

IMO,你创建了一个“木马”MSI。您可以在MSI中设置ARPSYSTEMCOMPONENT属性,并且它不会在“添加删除程序”中显示。但说实话,你可能不希望微星公司自己在系统上注册。在这种情况下,请从您的安装程序中删除某些关键标准操作,例如PublishComponents,PublishFeatures和PublishProduct。

+0

我不是在创建特洛伊微星,尽管内部安装程序(松鼠)可以被视为特洛伊木马。我不想隐藏MSI条目。我试图隐藏内部安装程序的卸载程序条目,因为此内部安装程序的卸载命令将由MSI卸载程序调用。我只是想通过为1个安装提供2个条目来减少对用户的混淆。 – skjoshi

+0

这是特洛伊微星的定义。内部安装者是希腊人。请参阅:https://blogs.msdn.microsoft.com/robmen/2006/02/01/google-toolbar-beta-for-enterprise-a-trojan-horse-msi-package/ –

+0

如果您真的想要MSI的条目在添加删除程序,以便MSI可以调用卸载,然后调用松鼠卸载然后这真的不是一个MSI的问题。微星的行为如预期。这是你必须压制的松鼠。出于好奇,每个用户或每台机器的MSI是多少?你的松鼠安装程序是相同还是不同? –

0

无论您是否应该这样做,您都可以修改Squirrel以免它创建注册表项。只需注释掉对CreateUninstallerRegistryEntry的调用或注释掉this file中的函数即可。 很容易,只需重建松鼠,并用您的定制版本替换nuget中的参考。
只要你在你的应用程序的大部分引导松鼠,我没有看到这样做的任何问题。

相关问题