Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows installer 在Squirrel.Windows installer中删除卸载条目而不删除应用程序_Windows Installer_Squirrel.windows - Fatal编程技术网

Windows installer 在Squirrel.Windows installer中删除卸载条目而不删除应用程序

Windows installer 在Squirrel.Windows installer中删除卸载条目而不删除应用程序,windows-installer,squirrel.windows,Windows Installer,Squirrel.windows,我正在MSI安装程序中使用Squirrel安装程序。MSI安装程序调用Squirrel安装程序。由于MSI安装程序将在“添加/删除程序”中包含该条目,因此我想删除(或不创建)由Squirrel安装程序创建的条目 我所做的是在onFirstRun的事件处理程序中使用RemoveUninstallerRegistryEntry,但它给了我以下错误: Couldn't write uninstall icon, don't care: System.IO.IOException: Illegal op

我正在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首先创建这些条目?

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

无论您是否应该这样做,您都可以修改Squirrel,使其永远不会创建注册表项。只需注释掉对CreateUninstallerRegistryEntry的调用或注释掉中的函数。 只需重建squirrel并用自定义版本替换对nuget的引用就足够简单了。

只要你用应用程序的大部分引导squirrel,我看不出这样做有任何问题。

当我在安装程序中使用
-s
标志时,它会继续创建卸载程序条目,因为它不会运行第一次安装。我不会创建特洛伊木马MSI,尽管内部安装程序(squirrel)一个可以被认为是特洛伊木马。我不想隐藏MSI条目。我试图通过内部安装程序隐藏卸载程序条目,因为MSI卸载程序将调用此内部安装程序的卸载命令。我只是想通过为1个安装设置2个条目来减少用户的混淆。这是特洛伊木马MSI的定义。内部安装程序是希腊人。请参阅:如果您真的希望MSI的条目出现在AddRemovePrograms中,以便MSI可以调用卸载,然后调用SquirrelUninstall,那么这实际上根本不是MSI的问题。MSI正在按预期运行。你要压制的是松鼠。出于好奇,您的MSI是每个用户还是每台机器?您的squirrel安装程序是相同的还是不同的?是的。根据这个定义,它将是一个特洛伊木马。然而,我认为Windows Installer标签导致将其标记为MSI问题,而事实并非如此。那我就把那个标签拿掉。它本质上是一只松鼠。这两种安装都是用户范围的,Squirrel用于提供自动升级的快速解决方案。