1

卸载产品时,我的 WIX 自定义操作应删除 SQL 作业。如果执行了 MSI 并选择了 REMOVE,这将非常有效。

但是,如果通过添加/删除程序删除产品,它似乎永远不会运行。

这是我的InstallExecuteSequence部分

<Custom Action="CleanupServer_Set" Before="CleanupServer"><![CDATA[NOT UPGRADINGPRODUCTCODE AND (REMOVE="ALL")]]></Custom>
<Custom Action="CleanupServer" Before="RemoveFiles"><![CDATA[NOT UPGRADINGPRODUCTCODE AND (REMOVE="ALL")]]></Custom>

这是我的自定义动作定义

 <CustomAction Id="CleanupServer_Set" Property="CleanupServer" Value="SERVER=[SERVER];DBFILES=[DBFILES]" Execute="immediate"/>      
 <CustomAction Id="CleanupServer" BinaryKey="CA" DllEntry="CleanupServer" Execute="deferred" Return="ignore" Impersonate="no"/> 

任何帮助将不胜感激。由于我通过控制面板运行卸载,我没有调试日志文件来查看发生了什么。

4

1 回答 1

0

更新:在Add / Remove Programs. 也许尝试Modify代替Remove- 如果有的话。这将在 GUI 模式下运行卸载,而不是在您选择Remove.

模拟:在静默模式下,您所依赖的属性可能未设置(如果它们在 GUI 中正常设置),或者您可能无法连接到数据库,因为msiexec.exe(Windows 安装程序引擎)在系统上下文中运行。我相信这些问题中的一个或两个至少是您问题的一部分。是远程数据库吗?

  1. 也许首先尝试设置Impersonateyes,像这样(不要在系统上下文中运行,模拟启动用户):

    <CustomAction Id="CleanupServer" BinaryKey="CA" DllEntry="CleanupServer"
                  Execute="deferred" Return="ignore" Impersonate="yes" /> 
    
  2. 或者,可以尝试非延迟运行(立即且未提升),并可能将其设置为仅运行一次:

    <CustomAction Id="CleanupServer" BinaryKey="CA" DllEntry="CleanupServer" 
                  Execute="firstSequence" Return="ignore" /> 
    

只是建议尝试,我没有测试过。


全局日志:首先,在机器上启用全局日志并以这种方式为自己获取一个日志文件- 请参阅部分:“全局用于机器上的所有设置”。基本上只需将此部分添加到注册表(但请查看链接以获取更多详细信息和上下文):

[HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\Installer]
"Logging"="voicewarmup"
"Debug"=dword:00000007

建议步骤

  1. 添加有问题的注册表值,如上所述(DebugLogging
  2. 运行安装,然后从 ARP 卸载
  3. 在 %TEMP% 文件夹中找到日志文件 - 具有随机名称
    • Windows Key+点击R类型%TEMP%并按下Enter
    • 按修改日期/时间排序。您的文件应显示在顶部
  4. 让我们看看日志。上传到 Github、Dropbox、GDisk 或其他地方。

还有一节是关于如何解释日志文件的——如果你想自己先看看。本质上,搜索自定义操作名称、相关属性值并浏览您找到的条目的直接“环境”。日志记录确实很冗长,但很有帮助。


持久化/回读属性值这是一个显示属性持久化以及如何使用AppSearch回读它们的答案。请记住在所有安装模式下都很好地测试这些功能(install,uninstall,modify,remove,major upgrade,silent and interactively- 通常会有惊喜)。

于 2018-06-04T14:34:37.760 回答