Wix创建静默卸载文件

Wix创建静默卸载文件,wix,windows-installer,silent-installer,uninstallation,Wix,Windows Installer,Silent Installer,Uninstallation,我的想法是用.msi安装文件制作一个卸载文件。我在这里读了一些有关创建卸载程序快捷方式的信息:,但我找不到有关在msi构建后生成卸载文件的信息,也许谁知道这是可能的?如果可能的话,我怎么做?或者可以使用cmd脚本吗?只需编写脚本,自动从mashine卸载我的程序。我的代码是: <?xml version="1.0" encoding="UTF-8"?> <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns

我的想法是用.msi安装文件制作一个卸载文件。我在这里读了一些有关创建卸载程序快捷方式的信息:,但我找不到有关在msi构建后生成卸载文件的信息,也许谁知道这是可能的?如果可能的话,我怎么做?或者可以使用cmd脚本吗?只需编写脚本,自动从mashine卸载我的程序。我的代码是:

    <?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"><?define WpfApp1_TargetDir=$(var.WpfApp1.TargetDir)?>
    <Product Id="*" Name="SetupProject2" Language="1033" Version="1.0.0.0" Manufacturer="Andrejka" UpgradeCode="PUT-GUID-HERE">
        <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />

    <Property Id="WIXUI_INSTALLDIR" Value="TESTFILEPRODUCTDIR" />
    <Property Id="WixShellExecTarget" Value="[#WpfApp1.exe]" />
    <CustomAction Id="LaunchApplication" BinaryKey="WixCA"  DllEntry="WixShellExec"   Impersonate="yes" />
    <Property Id="LAUNCH_APP_ON_EXIT" Value="1" />

   <InstallExecuteSequence>
     <Custom Action='LaunchApplication' After='InstallFiles'/>
  </InstallExecuteSequence>   
    <Property Id="WIXUI_EXITDIALOGOPTIONALCHECKBOX" Value="1" />

        <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
        <MediaTemplate EmbedCab="yes"/>
        <Feature Id="ProductFeature" Title="SetupProject2" Level="1">
            <ComponentGroupRef Id="ProductComponents" />
        </Feature>
    </Product>

    <Fragment>
        <Directory Id="TARGETDIR" Name="SourceDir">
      <Directory Id="TESTFILEPRODUCTDIR" Name="SetupProject2">
             <Directory Id="ProgramFilesFolder">
                 <Directory Id="INSTALLFOLDER" Name="SetupProject2" />      
       </Directory>
            </Directory>
        </Directory>
    </Fragment>

    <Fragment>
        <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
            <!-- TODO: Remove the comments around this Component element and the ComponentRef below in order to add resources to this installer. -->
            <!-- <Component Id="ProductComponent"> -->
                <!-- TODO: Insert files, registry keys, and other resources here. -->
            <!-- </Component> -->

            <Component Id="WpfApp1.exe" Guid="*">
              <File Id="WpfApp1.exe" Name="WpfApp1.exe" Source="$(var.WpfApp1_TargetDir)WpfApp1.exe" />     
            </Component>
            <Component Id="WpfApp1.exe.config" Guid="*">
              <File Id="WpfApp1.exe.config" Name="WpfApp1.exe.config" Source="$(var.WpfApp1_TargetDir)WpfApp1.exe.config" />
            </Component>
            <Component Id="aws_sdk_net_core_support.dll" Guid="*">
              <File Id="aws_sdk_net_core_support.dll" Name="aws-sdk-net-core-support.dll" Source="$(var.WpfApp1_TargetDir)aws-sdk-net-core-support.dll" />
            </Component>
            <Component Id="AWSSDK.Core.dll" Guid="*">
              <File Id="AWSSDK.Core.dll" Name="AWSSDK.Core.dll" Source="$(var.WpfApp1_TargetDir)AWSSDK.Core.dll" />
            </Component>
            <Component Id="AWSSDK.SimpleNotificationService.dll" Guid="*">
              <File Id="AWSSDK.SimpleNotificationService.dll" Name="AWSSDK.SimpleNotificationService.dll" Source="$(var.WpfApp1_TargetDir)AWSSDK.SimpleNotificationService.dll" />
            </Component>
            <Component Id="MimeSharp.dll" Guid="*">
              <File Id="MimeSharp.dll" Name="MimeSharp.dll" Source="$(var.WpfApp1_TargetDir)MimeSharp.dll" />
            </Component>
        </ComponentGroup>
    </Fragment>
</Wix>

一般来说,您不应该在“开始”菜单中设置卸载快捷方式,我认为这实际上违反了Microsoft对Windows应用程序的徽标要求。相反,您应该让人们通过“添加/删除程序”小程序以正常方式卸载您的产品

更新:我找到了这个答案,并提供了关于这个主题的更多信息:

另外,很明显,卸载是MSI文件的一项内置功能,除非被主动阻止(例如某些应用程序在添加/删除程序中隐藏自己不显示),否则卸载始终自动可用。在您的WiX源代码中,您不需要做任何额外的事情来正确支持卸载。只需遵循Windows Installer指南,它是“免费”的

如果您要求的是创建卸载批处理文件的方法,那么您可以在以下“卸载参考””中找到大量卸载MSI文件的方法:

简而言之,如果您有MSI的产品代码,只需运行下面的命令行即可卸载MSI(您可以通过如下所述查询您的系统来查找产品代码:-您可能需要查找它,因为您自动生成了产品代码):

或者只需参考原始MSI安装文件进行卸载,如下所示:

msiexec.exe /x "c:\filename.msi

有关这方面的更多信息,请参见上面的链接答案(卸载参考)。

一般来说,您不应该在“开始”菜单中设置卸载快捷方式,我认为这实际上违反了Microsoft对Windows应用程序的徽标要求。相反,您应该让人们通过“添加/删除程序”小程序以正常方式卸载您的产品

更新:我找到了这个答案,并提供了关于这个主题的更多信息:

另外,很明显,卸载是MSI文件的一项内置功能,除非被主动阻止(例如某些应用程序在添加/删除程序中隐藏自己不显示),否则卸载始终自动可用。在您的WiX源代码中,您不需要做任何额外的事情来正确支持卸载。只需遵循Windows Installer指南,它是“免费”的

如果您要求的是创建卸载批处理文件的方法,那么您可以在以下“卸载参考””中找到大量卸载MSI文件的方法:

简而言之,如果您有MSI的产品代码,只需运行下面的命令行即可卸载MSI(您可以通过如下所述查询您的系统来查找产品代码:-您可能需要查找它,因为您自动生成了产品代码):

或者只需参考原始MSI安装文件进行卸载,如下所示:

msiexec.exe /x "c:\filename.msi

有关此问题的更多信息,请参阅上面的链接答案(卸载参考)。

欢迎使用stackoverflow-我花了一些时间才理解您的问题,但我很高兴您似乎已经获得了所需的信息。请不要在您的源代码中发布guid,人们可能会复制它们,然后它们就不再是唯一的(这违背了guid的全部用途)。这是相当重要的。如果您还没有激活,我会生成新的组件guid,或者更好,使用将它们设置为*的概念,这将自动计算组件guid。你也可以。我在这里,谢谢你的回答。安装程序和卸载程序都是msiexec(Windows安装程序)。msi文件是一个数据库,WiX是构建它的一个工具。欢迎使用stackoverflow-我花了一些时间才理解您的问题,但我很高兴您似乎已经得到了您需要的。请不要在您的源代码中发布guid,人们可能会复制它们,然后它们就不再是唯一的(这违背了guid的全部用途)。这是相当重要的。如果您还没有激活,我会生成新的组件guid,或者更好,使用将它们设置为*的概念,这将自动计算组件guid。你也可以。我在这里,谢谢你的回答。安装程序和卸载程序都是msiexec(Windows安装程序)。msi文件是一个数据库,WiX是构建它的一个工具。