首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >向WiX安装程序添加自定义操作

向WiX安装程序添加自定义操作
EN

Stack Overflow用户
提问于 2015-09-01 10:35:06
回答 2查看 1.4K关注 0票数 0

我试图使用WiX安装程序在cmd中运行一个自定义命令。

我在整个安装过程中正确地使用了Product.wxs中的包含文件。

我有3个自定义动作,其中2个是很好的。似乎不起作用的是:

代码语言:javascript
运行
复制
<CustomAction Id='AddDefaultDomain'
        Directory='TARGETDIR'
        Impersonate="no"
        Execute="immediate"
        ExeCommand="C:\windows\system32\inetsrv\appcmd.exe set config /section:basicAuthentication /defaultLogonDomain:[%USERDOMAIN]  /commit:apphost"
        Return="asyncNoWait" />

安装程序运行正常,当我通过cmd窗口调用AppCmd并复制>粘贴cmd中的'ExeCommand‘并执行它时,它工作得很好。

也许这很简单,但就目前而言,我不明白为什么它不起作用。

所有的帮助都是感激的。

全文包含文件

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="utf-8"?>
<Include>
  <!-- Create Scheduled Task -->
  <InstallExecuteSequence>
    <Custom Action="CreateScheduledTaskGoogleService" After="InstallFiles">NOT Installed</Custom>
    <Custom Action="CreateScheduledTaskGoogleServiceId" After="CostFinalize">NOT Installed</Custom>
    <!-- Add Defualt DOmain -->
    <Custom Action="AddDefaultDomain" After="CostFinalize">NOT Installed</Custom>

  </InstallExecuteSequence>
  <CustomAction Id="CreateScheduledTaskGoogleService" Return="check" Impersonate="no" Execute="deferred" BinaryKey="WixCA" DllEntry="CAQuietExec" />
  <CustomAction Id="CreateScheduledTaskGoogleServiceId" Property="CreateScheduledTaskGoogleService" Execute="immediate" Value="&quot;[SystemFolder]SCHTASKS.EXE&quot; /CREATE /TN &quot;ActaNet Control - Google Sync&quot; /XML &quot;[INSTALLFOLDERPROGRAMFILESGOOGLE]ScheduledTask.xml&quot;" />

  <!-- DOES NOT SEEM TO BE WORKING! -->
  <CustomAction Id='AddDefaultDomain'
        Directory='TARGETDIR'
        Impersonate="no"
        Execute="immediate"
        ExeCommand="C:\windows\system32\inetsrv\appcmd.exe set config /section:basicAuthentication /defaultLogonDomain:[%USERDOMAIN]  /commit:apphost"
        Return="asyncNoWait" />

  <!-- Delete Scheduled Task -->
  <InstallExecuteSequence>
    <Custom Action="TaskDeleteGoogleService" Before="CreateScheduledTaskGoogleService">REMOVE="ALL"</Custom>
  </InstallExecuteSequence>
  <CustomAction Id="TaskDeleteGoogleService" Return="ignore" Execute="deferred" Directory="TARGETDIR" Impersonate="no" ExeCommand="SCHTASKS.EXE /DELETE /TN &quot;ActaNet Control - Google Sync&quot; /F" />
</Include>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-01 10:57:07

我要做的第一件事就是确认命令实际上正在被执行。使用像这样的工具来确认这一点。

完成此操作后,我将查看命令是否正在修改目标系统上需要提升特权的内容。如果是这样的话,我会将Execute属性的值更改为“延迟”,并查看它是否有效。似乎您正在尝试使用即时模式自定义操作来更改目标系统上的某些内容。将操作标记为延迟还需要将操作放在"InstallInitialize“和"InstallFinalize”之间。

在目前的情况下,您正在尝试在立即模式下启动exe。即时模式模拟登录用户,因此在UAC环境中,任何修改目标系统的自定义操作都可能失败。

希望这能有所帮助。

票数 0
EN

Stack Overflow用户

发布于 2015-09-07 08:51:20

首先,将自定义操作的“执行”更改为“Deffered”,因为您没有即时类型的系统权限。

其次,使用loggging来查看安装过程中发生了什么。使用下面的concole命令将创建用于安装过程的日志文件,该文件位于YourInstaller.msi中的同一个文件夹中:

代码语言:javascript
运行
复制
msiexec -i YourInstaller.msi -l*v log.txt

您可以通过自定义操作名在结果log.txt文件中查找安装程序试图执行时发生的情况。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32329437

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档