WiX在卸载时删除文件但不更新

时间:2014-08-22 15:46:19

标签: wix wix3.8

我有一个应用程序,可以在安装时给出正确的标志时进行记录(安装时/logLevel=debug会在服务启动时传递给应用程序)。我们的更新过程是自动卸载,然后使用新的MSI软件包进行安装。我知道WiX内置补丁功能,但这是我们的过程。

logLevel参数类似,我想在卸载期间在命令行上传递一些UPDATE="true"的效果。当此参数传递给卸载程序时,它应该删除日志文件。目前我们每次都删除这些文件,但希望在更新期间保留日志文件。这就是我现在想要扩展的内容:

<?if $(var.BUILD_CONFIG) = "Debug" ?> 
<?else?>
  <CustomAction Id="Cleanup_logfile" Directory="TempTest"
   ExeCommand="cmd /C &quot;del %systemroot%\temp\hexis_hawkeye_g.log.*&quot;"
   Execute="deferred" Return="ignore" HideTarget="no" Impersonate="no" />

  <InstallExecuteSequence>
    <Custom Action="Cleanup_logfile" Before="RemoveFiles" >
      REMOVE="ALL"
    </Custom>
  </InstallExecuteSequence> 
<?endif?> 

我一直在使用类似于以下内容的代码,但它似乎不起作用:

<?if $(var.BUILD_CONFIG) = "Debug" ?> 
<?else?>
  <?if '[UPDATE]' = "true" ?>
  <?else?>
    <CustomAction Id="Cleanup_logfile" Directory="TempTest"
     ExeCommand="cmd /C &quot;del %systemroot%\temp\hexis_hawkeye_g.log.*&quot;"
     Execute="deferred" Return="ignore" HideTarget="no" Impersonate="no" />

    <InstallExecuteSequence>
      <Custom Action="Cleanup_logfile" Before="RemoveFiles" >
        REMOVE="ALL"
      </Custom>
    </InstallExecuteSequence> 
  <?endif?>
<?endif?>

我不确定我是否正确地初始化UPDATE变量,或者这是否真的是一些无法以这种方式实现的预处理。我认为它不起作用,因为这些构造在预处理器文档页面上描述,但是,/logLevel和各种其他参数似乎在运行时安装时工作正常。我完全是WiX文盲,一直试图阅读他们的文档无济于事,任何有用的链接都很受欢迎。

2 个答案:

答案 0 :(得分:3)

我看到的问题:在卸载应用程序的主要升级期间(以及稍后安装新版本)REMOVE=ALL在卸载应用程序时也是如此,因此文件将被删除。 /> 您还需要另外检查是否也设置了UPGRADINGPRODUCTCODE,这只会在更新期间生效。

检查this answer给出了正确的条件(并按照我的方式为问题加书签,对所有可能的状态和条件都非常有用; - ))。

在您的情况下,正确的条件应如下:

<InstallExecuteSequence>
  <Custom Action="Cleanup_logfile" Before="RemoveFiles" >
    (NOT UPGRADINGPRODUCTCODE) AND (REMOVE="ALL")
  </Custom>
</InstallExecuteSequence>

答案 1 :(得分:0)

这可能有点像hackish,但我能够通过从LOGLEVEL中暗示要采取什么行动而不是传递任意变量来传递我想要的东西:

msiexec.exe /x {blah-blah-guid-blah} INSTALLLEVEL=2

对于我的自定义操作的配置:

<?if $(var.BUILD_CONFIG) = "Debug" ?> 
<?else?>
  <CustomAction Id="Cleanup_logfile" Directory="TempTest"
   ExeCommand="cmd /C &quot;if [INSTALLLEVEL] GEQ 2 del %systemroot%\temp\hexis_hawkeye_g.log.*&quot;"
   Execute="deferred" Return="ignore" HideTarget="no" Impersonate="no" />

  <InstallExecuteSequence>
    <Custom Action="Cleanup_logfile" Before="RemoveFiles" >
      REMOVE="ALL"
    </Custom>
  </InstallExecuteSequence> 
<?endif?>