Wix - 安装然后运行 ​​powershell 脚本

2024-01-10

我知道有几篇关于 Wix 和 PowerShell 脚本的帖子,但在尝试了这些帖子中的解决方案后,我仍然没有得到我想要的结果。为了解释我的情况,我创建了一个 Wix 安装项目,它将从我的本地计算机(运行 Windows 7)获取 2 个 Powershell 脚本和一个 msu 文件,并将它们捆绑到一个 msi 文件中。如果我在测试虚拟机(运行 Windows Server 2008 r2)上运行 msi 文件,文件将被复制到指定的目录中。伟大的。在“添加/删除程序”列表中显示新项目有一个缺点,但这将是我稍后会处理的问题。

(Powershell 脚本将安装 msu、编辑配置文件并启动服务 - 手动运行时工作正常)

将文件复制到目标计算机后,我尝试做的是运行复制的 Powershell 脚本之一,但到目前为止我还无法实现这一点。

我的 .wxs 代码如下所示(使用 TFS 2010 编写和编译)

<?xml version="1.0" encoding="UTF-8"?>
    <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
    <Product Id="a89cc681-d617-43ea-817e-1db89b941bf2" Name="Test1" Language="1033" Version="1.0.0.0" Manufacturer="Test1" UpgradeCode="d8db2663-2567-4bb8-9023-09988838eb55">
    <Package InstallerVersion="200" Compressed="yes" />

<Media Id="1" Cabinet="media1.cab" EmbedCab="yes" />

<!-- Set up the directory -->
<Directory Id="TARGETDIR" Name="SourceDir">
  <Directory Id="IISTIERINSTALLATION" Name="IISTierInstallation">
  </Directory>
</Directory>

<!-- Copy the files -->
<DirectoryRef Id="IISTIERINSTALLATION">
    <Component Id ="C2WTS_update_file" Guid="11960C39-12EB-4777-B43F-394ADB352DD3">
      <File Id="C2WTSmsu" Name="Windows6.1-KB974405-x64.msu" Source="C:\PS Scripts\Windows6.1-KB974405-x64.msu" />
    </Component>

    <Component Id ="C2WTSInstallScript" Guid="C85ED4DB-BDC1-4DD1-84FE-41D7463C6365">
      <File Id="C2WTSscript1" Name="C2WTS_service_install.ps1" Source="C:\PS Scripts\C2WTS_service_install.ps1" />
    </Component>

    <Component Id ="C2WTSxmlScript" Guid="AF1F85A7-88F7-4BBA-89D9-6817CFAA74F9">
      <File Id="C2WTSscript2" Name="Edit_c2wts_config.ps1" Source="C:\PS Scripts\Edit_c2wts_config.ps1" />
    </Component>
</DirectoryRef>

    <Feature Id="ProductFeature" Title="Test1" Level="1">
        <ComponentRef Id="C2WTS_update_file" />
  <ComponentRef Id="C2WTSInstallScript" />
  <ComponentRef Id="C2WTSxmlScript" />
        <ComponentGroupRef Id="Product.Generated" />
    </Feature>

<!-- Run custom action to run the powershell script-->
<Property Id="POWERSHELLEXE">
  <RegistrySearch Id="POWERSHELLEXE"
                  Type="raw"
                  Root="HKLM"
                  Key="SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell"
                  Name="Path" />
</Property>

<SetProperty Id="RunPSscript"
         After="InstallFiles"
         Sequence="execute"
         Value ="&quot;[POWERSHELL.EXE]&quot; -Version 2.0 -NoProfile -NonInteractive -InputFormat None -ExecutionPolicy Bypass -Command &quot;&amp; '[#C2WTS_service_install.ps1]' ; exit $$($Error.Count)&quot;" />

<CustomAction Id="RunPSscript"
              BinaryKey="WixCA"
              DllEntry="CAQuietExec"
              Execute="deferred"
              Return="check"
              Impersonate="yes" />

  <Custom Action="RunPSscript" After="InstallFiles">
    <![CDATA[NOT Installed]]>
  </Custom>

</Product>
</Wix>

由于添加了自定义活动来执行 powershell 脚本,因此当我运行 msi 时没有任何反应。这些文件不再像以前那样出现在其文件夹中,并且未安装任何内容。谁能告诉我哪里错了?如前所述,网上有几个关于类似问题的解决方案,但到目前为止没有一个对我有用

UPDATE

我尝试在打开日志记录的情况下安装 msi,日志返回以下 2 行:

CAQuietExec64:错误0x80070057:无法获取命令行数据

CAQuietExec64:错误0x80070057:无法获取命令行

在网上搜索该错误代码的修复程序后,我仍然没有找到任何答案来帮助解决问题。有人有什么想法吗?有 Wix 专家吗?

提前致谢


显然,您从与我相同的站点获得了这个示例...您发现了其中一个错误,但没有找到另一个:-)

In your 设置属性 ID="RunPScript"节点,您需要更改[POWERSHELL.EXE] TO [PowerShell 可执行文件]根据上面属性中的定义方式,您可以在其中从注册表中检索路径。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Wix - 安装然后运行 ​​powershell 脚本 的相关文章

随机推荐

  • Quartz作业存储与活动数据相关吗?

    据我了解石英官方文档 http quartznet sourceforge net tutorial lesson 9 html AdoStore 必须用于活动数据存储 如 JobDataMap 和其他数据 如果我错了请纠正我 除了这个说明
  • Xcode 有代码自动格式化功能吗?

    有什么方法可以在 Xcode IDE 中自动格式化源代码吗 Xcode 中并没有真正的自动格式化选项 有一个选项 I Control I 重新缩进代码 这将根据您首选项中设置的制表符宽度重新对齐代码 但仅此而已 如果您使用像 TextMat
  • 使用 Globalize 和Friendly_id 将同一页面重定向到不同语言

    在过去的几个小时里 我一直在挠头 寻找答案 但我无法在任何地方找到它 我的宝石文件 Use globalize for translating models gem globalize github ncri globalize for R
  • Angular 2:检查单击元素时是否按下了 Shift 键

    在 Angular 2 应用程序中 我希望点击事件在以下情况下触发不同的内容 按住 Shift 键 如何实现这一目标 html如下 div class item div 我想做这样的事情 toggleSelected obj if shif
  • 实现 Comparable 以使用字符串按字母顺序排序

    我希望有一个可比较的对象 在这种情况下在 TreeSet 中使用它 我的对象有一个名称字段 我希望它按字母顺序排序 我首先想到我可以使用字符串的 unicode 值并简单地进行减法 但是 AA 会在 Ab 之后 我是这样开始的 public
  • 连接 RAISERROR 中的消息

    这里正确的语法是什么 If timestamp lt Select PromoStartTimestamp From promo RAISERROR Code not valid until Select PromoStartTimesta
  • Android/Java 上的数据报传输层安全 (DTLS)

    有人在 Android 上使用过 DTLS 或者有支持 DTLS 的开源 Java 实现吗 在 Android 上保护 UDP 流量的其他选项有哪些 纯 Java 中尚不支持 DTLS 我们最终通过 JNI 使用 OpenSSL 我怀疑你会
  • 如何使用 maven-bundle-plugin 从导入包中排除版本号?

    我在使用 maven bundle plugin 生成的 MANIFEST MF 时遇到问题 由于某种原因 当我在
  • 运行 PHPUnit 时出错

    当我尝试运行时出现以下错误phpunit 从我的项目的测试文件夹中 PHP Fatal error Call to undefined method PHP CodeCoverage Filter getInstance in usr sh
  • 排除 Spring-data-rest 资源的某些字段

    我正在尝试将 Spring data rest 与 spring data mongodb 一起使用来公开只读资源 我遇到的问题是我想对我的文档有不同的看法 假设我在文档中有一些私人信息 我不想公开它们 所以我尝试了几种方法 我读了这篇文章
  • Plotly python离线-点击时访问url?

    是否可以配置一个plotly https plot ly python绘图以便用户在单击某个数据点时被带到特定的 url 我的预期用途是条形图 我希望能够单击一个条形图 然后转到一个 url 每个条形图都配置有不同的 url 我正在使用pl
  • 如何在 highcharter 中悬停时获得系列突出显示?

    Highcharts 具有这个巧妙的功能 当将鼠标悬停在柱形图中的条形上时 整个系列都会突出显示 最好实时查看here https www highcharts com demo column negative 在 R 包装器中highch
  • 使用 dev_appserver.py 进行覆盖不包括我的项目文件

    我运行以下命令覆盖范围3 6 https pypi python org pypi coverage Appengine 1 8 0 64 位 Ubuntu 13 04 上的 Python 2 7 4 coverage run dev ap
  • 如何在 C# 中检测任何 Excel 单元格的更改?

    我正在编写一个 Excel VSTO 插件 并且希望获取特定工作表中的单元格更改事件 如何才能做到这一点 检查Excel Application SheetChange事件处理程序 基本上 只要任何工作表中的任何单元格发生更改 它就会触发
  • 使用 Carrierwave 重命名上传的文件

    我正在使用 Carrierwave 上传文件 并且可以正常工作 我的问题是尝试更改上传文件的名称 在生成的 uploader rb 中有一个我认为我应该使用的方法 def filename something jpg if original
  • vim 键映射参考

    我刚刚安装了 command t 插件以及将其映射到 cmd t 而不是 Leader t 的内容 我对 vim 相当陌生 我不知道按键映射的符号是什么 在哪里可以找到在 vim 中映射组合键时使用的符号的参考 vim 的一个原则是 未记录
  • 如何在 javascript 中从弹出窗口进行打印?

    我有一个 Net 应用程序 它动态创建一个小型 HTML 页面 并使用 javascript document open 方法将其弹出在新窗口中 具有该功能的一切都工作正常 现在我想向打印该页面的 HTML 页面添加一个按钮 我尝试使用以下
  • Boolean.TRUE == myBoolean 与 Boolean.TRUE.equals(myBoolean)

    是否有过使用的情况equals Boolean and 处理时会返回不同的结果Boolean物体 Boolean TRUE myBoolean Boolean TRUE equals myBoolean 我在这里考虑的不是原始类型 而是布尔
  • 如何将 JFrame 放入 Java Swing 中现有的 JPanel 中?

    I have an open source java swing application like this http i47 tinypic com dff4f7 jpg http i47 tinypic com dff4f7 jpg 您
  • Wix - 安装然后运行 ​​powershell 脚本

    我知道有几篇关于 Wix 和 PowerShell 脚本的帖子 但在尝试了这些帖子中的解决方案后 我仍然没有得到我想要的结果 为了解释我的情况 我创建了一个 Wix 安装项目 它将从我的本地计算机 运行 Windows 7 获取 2 个 P