Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.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 如何在卸载MSI时删除单个注册表值?_Windows Installer_Registry_Uninstallation - Fatal编程技术网

Windows installer 如何在卸载MSI时删除单个注册表值?

Windows installer 如何在卸载MSI时删除单个注册表值?,windows-installer,registry,uninstallation,Windows Installer,Registry,Uninstallation,我的应用程序有时会在执行期间创建一个特定的注册表值,即在安装时不创建。该值位于我不想删除的注册表项中;我只想删除我创建的值。因为它不是在安装时创建的,所以windows installer不会在卸载时自动删除它。如果该值存在,我可以在MSI中执行什么操作来删除该值 表中似乎没有此选项。这是否意味着我必须编写自定义操作?如果是,有人举过例子吗 我正在使用Wise Windows Installer Edition创建MSI 也已发布。抱歉,您需要自定义操作。抱歉,您需要自定义操作。您确实需要执行自

我的应用程序有时会在执行期间创建一个特定的注册表值,即在安装时不创建。该值位于我不想删除的注册表项中;我只想删除我创建的值。因为它不是在安装时创建的,所以windows installer不会在卸载时自动删除它。如果该值存在,我可以在MSI中执行什么操作来删除该值

表中似乎没有此选项。这是否意味着我必须编写自定义操作?如果是,有人举过例子吗

我正在使用Wise Windows Installer Edition创建MSI


也已发布。

抱歉,您需要自定义操作。

抱歉,您需要自定义操作。

您确实需要执行自定义操作

我最终实现了这一点,在Deferred部分中的WriteRegistryValue之后放置了一个自定义操作

用于删除密钥的.vbs如下所示:

const HKLM = &H80000002
strComputer = "."
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
strKeyPath = "SOFTWARE\Mozilla\Firefox\Extensions"
strValueName = "myext@myco.com"
oReg.DeleteValue HKLM,strKeyPath,strValueName

您确实需要执行自定义操作

我最终实现了这一点,在Deferred部分中的WriteRegistryValue之后放置了一个自定义操作

用于删除密钥的.vbs如下所示:

const HKLM = &H80000002
strComputer = "."
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
strKeyPath = "SOFTWARE\Mozilla\Firefox\Extensions"
strValueName = "myext@myco.com"
oReg.DeleteValue HKLM,strKeyPath,strValueName

不幸的是,这是用于在安装组件而不是卸载组件时删除注册表项。您是正确的。我考虑的是RemoveFile表,它有一个名为msidRemoveFileInstallModeOnRemove的属性。我不知道这个注册表值是什么,但是否可以在卸载时保留它,但确保在下次安装时将其删除?从应用程序运行时的角度来看,我认为结果是一样的。或者这个注册表值是在操作系统级别而不是在应用程序本身上操作某些东西?我知道要在卸载过程中编写一个新值,我需要一个自定义操作。该值将我的软件注册为Firefox的扩展,因此不,将其保留在那里是不好的,因为它会影响其他软件。这将是一个自定义操作!不幸的是,这是用于在安装组件而不是卸载组件时删除注册表项。您是正确的。我考虑的是RemoveFile表,它有一个名为msidRemoveFileInstallModeOnRemove的属性。我不知道这个注册表值是什么,但是否可以在卸载时保留它,但确保在下次安装时将其删除?从应用程序运行时的角度来看,我认为结果是一样的。或者这个注册表值是在操作系统级别而不是在应用程序本身上操作某些东西?我知道要在卸载过程中编写一个新值,我需要一个自定义操作。该值将我的软件注册为Firefox的扩展,因此不,将其保留在那里是不好的,因为它会影响其他软件。这将是一个自定义操作!令人遗憾的是,MSI没有提供删除注册表值的标准技术。例如,我们应该如何删除HKCU/Windows/Current/Version/Run/My Program很遗憾MSI没有提供删除RegistryValue的标准技术。例如,我们应该如何删除HKCU/Windows/Current/Version/Run/My程序