我的.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中,它必须位于批处理文件中(实际上它将位于可执行文件中,但我认为这个批处理示例更容易)
您可以尝试在cmd中添加/RU "SYSTEM"。我从来没有运行过任务,但它可能有用?听起来好像用户登录到机器和在系统上下文中运行任务之间存在一些混淆。