我有一个应用程序,可以在安装时给出正确的标志时进行记录(安装时/logLevel=debug
会在服务启动时传递给应用程序)。我们的更新过程是自动卸载,然后使用新的MSI软件包进行安装。我知道WiX内置补丁功能,但这是我们的过程。
与logLevel
参数类似,我想在卸载期间在命令行上传递一些UPDATE="true"
的效果。当此参数传递给卸载程序时,它应该不删除日志文件。目前我们每次都删除这些文件,但希望在更新期间保留日志文件。这就是我现在想要扩展的内容:
<?if $(var.BUILD_CONFIG) = "Debug" ?>
<?else?>
<CustomAction Id="Cleanup_logfile" Directory="TempTest"
ExeCommand="cmd /C "del %systemroot%\temp\hexis_hawkeye_g.log.*""
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 "del %systemroot%\temp\hexis_hawkeye_g.log.*""
Execute="deferred" Return="ignore" HideTarget="no" Impersonate="no" />
<InstallExecuteSequence>
<Custom Action="Cleanup_logfile" Before="RemoveFiles" >
REMOVE="ALL"
</Custom>
</InstallExecuteSequence>
<?endif?>
<?endif?>
我不确定我是否正确地初始化UPDATE
变量,或者这是否真的是一些无法以这种方式实现的预处理。我认为它不起作用,因为这些构造在预处理器文档页面上描述,但是,/logLevel
和各种其他参数似乎在运行时安装时工作正常。我完全是WiX文盲,一直试图阅读他们的文档无济于事,任何有用的链接都很受欢迎。
答案 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 "if [INSTALLLEVEL] GEQ 2 del %systemroot%\temp\hexis_hawkeye_g.log.*""
Execute="deferred" Return="ignore" HideTarget="no" Impersonate="no" />
<InstallExecuteSequence>
<Custom Action="Cleanup_logfile" Before="RemoveFiles" >
REMOVE="ALL"
</Custom>
</InstallExecuteSequence>
<?endif?>