我想在使用msi文件安装之前和之后运行PowerShell脚本。您可以在下面看到我在Visual Studio 2013中为wix-project配置的基本内容。 msi编译时没有错误,我可以运行msi文件并完成步骤直到安装结束而没有错误。
在日志中我可以看到,CustomAction已经启动,但这不可能是因为尚未创建应该由底层脚本创建的目录。
如果我通过powershell手动运行脚本文件,一切运行良好。所以脚本本身应该工作,不会抛出错误。
这里有什么建议吗?
维克斯-项目:
<Product Id="*" Name="MyAPP" Language="1031" Version="1.0.0.0" Manufacturer="Me" UpgradeCode="2A0A9FDB-9DD2-4058-8742-885EF63BFF37">
<!-- 6e8e53ce-66e4-4d97-900c-9678b83e44cc"> -->
<Package InstallerVersion="400" Compressed="yes" InstallScope="perMachine" Languages="1031" Manufacturer="Me" Description="Installiert den MyApp auf ihr System" Comments="NOTHING TO COMMENT"/>
<MediaTemplate EmbedCab="yes" />
<!-- Major Upgrade Rule to disallow downgrades -->
<MajorUpgrade DowngradeErrorMessage="Eine neuere Version vom [ProductName] ist bereits installiert." />
<!-- ################################### -->
<!-- Aktionen vor installation ##########-->
<!-- ################################### -->
<InstallExecuteSequence>
<Custom Action="StartBatchFile" After="InstallInitialize"/>
<Custom Action="EndBatchFile" After="InstallFinalize"/>
</InstallExecuteSequence>
<CustomAction Id="StartBatchFile"
Property="RegisterHttpModulePowerShellProperty"
Value=""C:\Windows\system32\WindowsPowerShell\v1.0\powershell.exe" -Version 2.0 -NoProfile -NonInteractive -InputFormat None -ExecutionPolicy Bypass -File "./BeforeInstallationScript.ps1" "[DIR_ComponentRef]""
Execute="immediate" />
<CustomAction Id="EndBatchFile"
Property="RegisterHttpModulePowerShellProperty"
Value=""C:\Windows\system32\WindowsPowerShell\v1.0\powershell.exe" o-Versin 2.0 -NoProfile -NonInteractive -InputFormat None -ExecutionPolicy Bypass -File "./AfterInstallationScript.ps1" "[DIR_ComponentRef]""
Execute="immediate" />
<WixVariable Id="WixUIBannerBmp" Value="WixUIBannerBmp.bmp" />
<!-- Background bitmap used on the welcome and completion dialogs 493 × 312 -->
<WixVariable Id="WixUIDialogBmp" Value="WixUIDialogBmp.bmp" />
<!-- ################################### -->
<!-- User-Interface ####################-->
<!-- ################################### -->
<Property Id="WIXUI_INSTALLDIR">DIR_ComponentRef</Property>
<UIRef Id="WixUI_InstallDir" />
<UIRef Id="WixUI_ErrorProgressText" />
<!-- ################################### -->
<!-- Notwendige Abhaengigkeiten ########-->
<!-- ################################### -->
<PropertyRef Id="NETFRAMEWORK40FULL"/>
<Condition Message="Diese Anwendung benoetigt .NET Framework 4.0. Bitte installieren sie zuerst das .NET Framework und starten Sie die Installation erneut.">
<![CDATA[Installed OR NETFRAMEWORK40FULL]]>
</Condition>
<!-- ################################### -->
<!-- FEATURE-Installation ##############-->
<!-- ################################### -->
<Feature Id="FEATURE_MyApp" Title="MyApp" Description="Installiert die Datein des MyApps auf das System" Level="1" AllowAdvertise="no" ConfigurableDirectory="DIR_ComponentRef">
<ComponentRef Id="[...]"/>
[...]
</Feature>
</Product>
<Fragment>
<!-- ################################### -->
<!-- Ordner-Struktur ################### -->
<!-- ################################### -->
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder">
<Directory Id="DIR_ComponentRef" Name="MyApp">
<Directory Id="DIR_CONFIGURATION" Name="configuration">
[...]
</Directory>
</Directory>
</Directory>
</Directory>
</Fragment>
<Fragment>
[...]
<!-- ################################### -->
<!-- Componenten-Definition ######## -->
<!-- ################################### -->
<DirectoryRef Id="DIR_ComponentRef">
<Component Id="CMP_MyApp.exe">
<File Id="MyApp.exe" Source="$(var.SourcePath)MyApp.exe" KeyPath="yes" Checksum="yes" />
</Component>
[...]
</DirectoryRef>
</Fragment>
</Wix>
登入结果:
=== Protokollierung gestartet: 16.11.2016 10:41:12 ===
Aktion 10:41:12: INSTALL.
[...]
Aktion 10:41:35: StartBatchFile.
Aktion gestartet um 10:41:35: StartBatchFile.
Aktion beendet um 10:41:35: StartBatchFile. Rückgabewert 1.
[...]
Aktion beendet um 10:41:38: InstallFinalize. Rückgabewert 1.
Aktion 10:41:38: EndBatchFile.
Aktion gestartet um 10:41:38: EndBatchFile.
Aktion beendet um 10:41:38: EndBatchFile. Rückgabewert 1.
Aktion beendet um 10:41:38: INSTALL. Rückgabewert 1.
[...]
如果您需要进一步的信息,请告诉我。
答案 0 :(得分:0)
我不确定CustomAction
是否可以在本地目录下找到PS1文件。尝试使用以下块调整WIX文件
<!-- Ensure PowerShell is installed and obtain the PowerShell executable location -->
<Property Id="POWERSHELLEXE" Secure="yes">
<RegistrySearch Id="POWERSHELLEXE"
Type="raw"
Root="HKLM"
Key="SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell"
Name="Path" />
</Property>
<Condition Message="This application requires Windows PowerShell.">
<![CDATA[Installed OR POWERSHELLEXE]]>
</Condition>
....
<CustomAction Id="RegisterPowershellCommandStop"
Property="CallPowerShellCommandStop"
Value=""[POWERSHELLEXE]" -NoLogo -NonInteractive -InputFormat None -ExecutionPolicy Bypass -NoProfile -File "[INSTALLFOLDER]ServiceStartStop.ps1" "[SERVICENAME]" "stop""
Execute="immediate" />
....
<DirectoryRef Id="INSTALLFOLDER">
<Component Id="CMP_StartStopServicesScript" Guid="*">
<File Id="FILE_StartStopServicesScript" Source="!(wix.binDirectory)\ServiceStartStop.ps1" KeyPath ="yes" />
</Component>
...
在这种情况下,我们会调用PS(&#34;存储&#34;在[POWERSHELLEXE]
中启动ServiceStartStop.ps1
(位于[INSTALLDIR]
下)。
希望有所帮助。