【发布时间】:2016-12-29 14:30:12
【问题描述】:
我的 .wxs 文件中有以下 XML 用于在卸载时运行批处理文件:
<InstallExecuteSequence>
<Custom Action="uninstall_action" After="InstallInitialize">Installed AND NOT UPGRADINGPRODUCTCODE</Custom>
</InstallExecuteSequence>
和
<Fragment>
<CustomAction
Id ="uninstall_action"
Directory ="INSTALLDIR"
ExeCommand =""[INSTALLDIR]uninstallTester.bat""
Execute ="deferred"
Impersonate="no"
/>
</Fragment>
所以它应该运行位于安装目录中的批处理文件。我的批处理文件如下所示:
schtasks /Create /F /SC ONCE /ST 22:05 /TN exampleUninstall /TR "echo hello" 2> batch_log.log
当我运行卸载程序时,我会在 batch_log.log 中看到以下内容:
ERROR: No mapping between account names and security IDs was done.
(40,4):UserId:
似乎只有在创建新的计划任务时才有问题,因为如果我更改批处理以删除计划任务,它会运行而不会出错。所以我的问题是:如何安排这个一次性任务运行?单独运行批处理文件也可以,只是被卸载程序调用时出现问题。
我也试过用谷歌搜索那个特定的错误,但没有运气。
我已经简化了我的实际用例,所以我不能仅仅将 schtasks 命令移动到安装程序中的 ExecCommand 中,它必须存在于一个批处理文件中(实际上它将存在于一个可执行文件中,但我认为这个批处理示例更容易)
【问题讨论】:
-
您可以尝试将 /RU "SYSTEM" 添加到您的 cmd。我从来没有运行过 schtasks 但它可能有用吗?听起来用户登录到机器但在系统上下文下运行任务之间存在一些混淆。
-
@BrianSutherland 这似乎成功了。如果您将其发布为答案,我会接受。
标签: windows wix windows-installer uninstallation windows-task-scheduler