首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >wix卸载程序(Exe)如何删除自身

wix卸载程序(Exe)如何删除自身
EN

Stack Overflow用户
提问于 2018-05-02 14:41:59
回答 3查看 250关注 0票数 3

我有我的自定义安装程序和卸载程序,其中安装MSI和其他资源到PC。卸载过程在下面的行中工作:

代码语言:javascript
复制
<DirectoryRef Id="TARGETDIR">
    <Component Id="AddRemovePrograms" Guid="*" KeyPath="yes">
      <RegistryValue Id="ARPEntry1" Type="string" Action="write" Root="HKLM" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\$(var.ProductCode)" Name="DisplayName" Value="$(var.ProductName)"/>
      <RegistryValue Id="ARPEntry2" Type="string" Action="write" Root="HKLM" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\$(var.ProductCode)" Name="DisplayVersion" Value="$(var.ProductVersion)"/>
      <RegistryValue Id="ARPEntry3" Type="string" Action="write" Root="HKLM" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\$(var.ProductCode)" Name="Publisher" Value="$(var.Manufacturer)"/>
      <RegistryValue Id="ARPEntry4" Type="integer" Action="write" Root="HKLM" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\$(var.ProductCode)" Name="NoModify" Value="1"/>
      <RegistryValue Id="ARPEntry5" Type="string" Action="write" Root="HKLM" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\$(var.ProductCode)" Name="UninstallString" Value="[CommonAppDataFolder]\[Manufacturer]\[ProductName]\Uninstaller.exe"/>
      <RegistryValue Id="ARPEntry6" Type="string" Action="write" Root="HKLM" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\$(var.ProductCode)" Name="InternalVersion" Value="$(var.ProductVersion)"/>
    </Component>
    <Directory Id="CommonAppDataFolder">
      <Directory Id="UninstallCompanyDir" Name="$(var.Manufacturer)">
        <Directory Id="UninstallProductDir" Name="$(var.ProductName)">
          <Component Id="UninstallerExe" Guid="*">
            <File Id="UninstallerExeFile" Name="Uninstaller.exe" Source="..\Uninstaller.exe" Vital="yes" KeyPath="yes">
            </File>
          </Component>
        </Directory>
      </Directory>
    </Directory>
  </DirectoryRef>  

在Uninstaller.exe中,我将自己复制到临时文件夹并从那里运行它,但问题是我的卸载程序留在了那里(在TEMP中)。

问题:如何使用脚本删除可执行文件(从临时文件或原始文件中删除)?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-05-02 14:52:32

你可以用批处理完成这件事!

就像这样

代码语言:javascript
复制
cmd.exe /C TIMEOUT 10 && del "{your uninstaller path}"

在卸载程序关闭事件中运行它。这将产生一个新的cmd进程,并在10秒后执行删除命令。

票数 2
EN

Stack Overflow用户

发布于 2018-05-02 17:48:07

对于这个场景,有一个记录在案的“如何”,它不要求您有一个可执行文件,而是使用msiexec.exe而不是您自己的可执行文件:

如何:创建卸载快捷方式

您不会说您的exe除了调用卸载之外是否执行其他任何操作,但是,将其复制到临时文件夹并将可执行文件留在那里是完全可以接受的(而且它不需要是exe,因为您可以将它上的CreateProcess作为.tmp文件调用)。有一些标准的工具可以清除临时文件夹(磁盘清理,服务器脚本),所以不要担心。

通常,您不需要从Windows 10开始在“开始”菜单上卸载。右键单击已安装的应用程序,无论如何都会弹出卸载,甚至可能会抑制您的卸载。

票数 1
EN

Stack Overflow用户

发布于 2018-05-02 17:22:45

创建以下批处理文件。这将运行卸载程序,当卸载程序完成时,它将同时删除卸载程序和批处理文件。

代码语言:javascript
复制
START /WAIT YourUninstaller.exe
Del YourUninstaller.exe
Del ThisBatchFile.bat
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50137373

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档