运行批处理文件,在卸载时使用Wix调度任务

时间:2016-08-22 22:30:30

标签: windows wix windows-installer uninstaller schtasks

我的.wxs文件中有以下XML用于在卸载时运行批处理文件:

<InstallExecuteSequence>
  <Custom Action="uninstall_action" After="InstallInitialize">Installed AND NOT UPGRADINGPRODUCTCODE</Custom>
</InstallExecuteSequence>

<Fragment>
  <CustomAction 
    Id         ="uninstall_action"
    Directory  ="INSTALLDIR"
    ExeCommand ="&quot;[INSTALLDIR]uninstallTester.bat&quot;"
    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中,它必须存在于批处理文件中(实际上它将存在于可执行文件中,但我认为这个批处理示例更容易)

1 个答案:

答案 0 :(得分:1)

您可以尝试添加/ RU&#34; SYSTEM&#34;你的cmd。我从未运行过schtasks,但它可能有用吗?听起来好像用户登录到机器但在系统环境下运行任务时会有些混淆。