【问题标题】:Wix custom action does not execute using Add/Remove program but does execute running MSI and selecting RemoveWix 自定义操作不会使用添加/删除程序执行,但会执行运行 MSI 并选择删除
【发布时间】:2018-11-13 20:00:06
【问题描述】:

卸载产品时,我的 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"/> 

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

【问题讨论】:

  • 这是一个格式很好、措辞很好的问题。让我们给这个家伙一些支持,这样他就可以获得适当的 stackoverflow 权利和特权?我们不应该更好地欢迎新用户吗? (这显然是一个真实的用户)。

标签: wix windows-installer uninstallation custom-action addremoveprograms


【解决方案1】:

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

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

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

    <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" /> 
    

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


全局日志记录:首先,enable global logging on the machine and get yourself a log file that way - 请参阅部分:“全局用于机器上的所有设置 ”。基本上只需将此部分添加到注册表(但请查看链接以获取更多详细信息和上下文):

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

建议步骤

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

There is also a section on how to interpret log files - 如果您想自己先看看。本质上,搜索自定义操作名称、相关属性值并浏览您找到的条目的直接“环境”。日志记录确实很冗长,但很有帮助。


持久化/回读属性值Here is an answer showing persisting of properties and how you can read them back with AppSearch。记得在所有安装模式下测试这些功能(installuninstallmodifyremovemajor upgradesilent and interactively - 通常会有惊喜)。

【讨论】:

  • 感谢您的建议!我会尽快实施,看看进展如何。
  • 刚刚更新了一些东西。只是为了让你重新加载页面。
  • 所以临时日志是关键。作为 customActionData 传递的服务器名称是空白的,但我想我知道如何处理它。谢谢 - 您的大部分回答都是有价值的信息!
  • 您是否将服务器名称写入注册表?也许你可以用 AppSearch 把它读回来?
  • Here is an answer showing persisting of properties and how you can read them back with AppSearch。请记住在所有安装模式下测试这些功能(installuninstallmodifyremovemajor upgradesilent and interactively - 通常会有惊喜)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-26
  • 2011-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-08
相关资源
最近更新 更多