如何使用提升权限运行自定义可执行文件

时间:2012-03-08 06:28:05

标签: wix windows-installer

我需要在安装之后和卸载之前运行可执行文件以进行自定义安装/拆卸。它需要以提升的权限运行。如何正确地做到这一点?

3 个答案:

答案 0 :(得分:18)

在如何编写需要管理权限的自定义操作

部分中查看此blog

另一个link,它真正解释了所有类型的自定义操作。 Wix中的CustomAction元素。

这可以帮到你一点点。

在查看您的解决方案之后,您似乎正在进行Type 18 CustomAction,在这里我粘贴了上一个Blog的内容以用于这些类型:

自定义操作类型18 调用在当前会话期间随应用程序一起安装的可执行文件。 CustomAction表中的Source列包含File表中记录的键。

CustomAction表中的Target列包含可执行文件的命令行字符串。 所有返回处理,执行调度和脚本执行选项都适用。

由于文件随应用程序一起安装,因此对自定义操作类型18有序列限制:

If the source file is not already installed on the computer:
    Custom action must be sequenced after CostFinalize action because only after this action path to the file can be resolved.
If the source file is not already installed on the computer:
    Deferred custom actions of this type must be sequenced after the InstallFiles action.
    Non-deferred custom actions of this type must be sequenced after the InstallFinalize action.

自定义操作的入口点接收安装会话的句柄。在执行延迟的自定义操作期间,会话可能不再存在。要获取属性的值,请使用CustomActionData属性。

以下是在Wix中添加Type 18自定义操作的方法:

<Directory Id="TARGETDIR" Name="SourceDir">
  <Component Id="Component1"
             Guid="*">
    <File Id="MyCA" Name="MyCA.exe" />
  </Component>
</Directory>

<CustomAction Id="DoSomething"
              FileKey="MyCA"
              ExeCommand="-switch"
              Execute="deferred"
              Return="check"
              HideTarget="no"
              Impersonate="no" />

<InstallExecuteSequence>
  <Custom Action="DoSomething" Before="InstallFinalize" />
</InstallExecuteSequence>

首先,我们将MyCA.exe添加到File表中。

我们还在CustomAction表中添加了Type 18的自定义操作。 FileKey属性指向具有自定义操作dll的元素。 ExeCommand属性指定可执行文件的命令行字符串。

最后要做的是在所有必需的序列表中安排我们的自定义操作。

这应该可以帮助你解决缺少的问题,但我强烈建议您查看所有类型的自定义操作,以便在以后制作更多安装程序时帮助您

答案 1 :(得分:5)

你可以为Install&amp;添加'NOT REMOVE'修复顺序。并且'仅对UnInstall序列安装AND(REMOVE =“ALL”)'。

    <InstallExecuteSequence>
      <Custom Action='Install' After='InstallFiles' >
        NOT REMOVE
      </Custom>

      <Custom Action='Uninstall' After='InstallFiles' >
         Installed AND (REMOVE = "ALL")
      </Custom>

    </InstallExecuteSequence>

答案 2 :(得分:0)

有人知道为什么它不起作用吗? 应该打开的文件(.exe)甚至没有打开。.

<CustomAction Id="StartAdditionalInstallation" FileKey="haspdinst.exe" ExeCommand="" Execute="immediate" HideTarget="no" Impersonate="no" Return="asyncNoWait" />
<Property Id="WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT" Value="Install HASP key drivers" />
<UI>
  <Publish Dialog="ExitDialog" Control="Finish" Order="1" Event="DoAction" Value="StartAdditionalInstallation" >WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT</Publish>
</UI>