我需要将Microsoft .NET 4.5作为我的安装包的先决条件包含在内,我希望它尽可能自动化.然而,.NET应该不会被unistalling时取出.我想我已经阅读了关于如何使用DetectCondition和/或的所有内容InstallCondition,但我仍然没有把它做对; 它要么总是运行.NET安装,要么永远不运行它.
这是我的最新设置:
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"
xmlns:bal="http://schemas.microsoft.com/wix/BalExtension"
xmlns:netfx='http://schemas.microsoft.com/wix/NetFxExtension'>
<!-- Define minimum .NET Framework version -->
<?define NetFx45MinRelease = 377811?>
...
<Chain>
<PackageGroupRef Id="Netfx45FullPackage"/>
...
</Chain>
<PackageGroup Id="Netfx45FullPackage">
<ExePackage Id="Netfx45Full" Cache="no" Compressed="yes" PerMachine="yes" Permanent="yes" Vital="yes"
SourceFile="..\..\..\..\Environment\InstallerResources\Prerequisites\dotnetfx45_full_x86_x64.exe"
InstallCommand="/passive /norestart"
DetectCondition="NETFRAMEWORK45 >= $(var.NetFx45MinRelease)"
InstallCondition="NOT REMOVE AND (NETFRAMEWORK45 < $(var.NetFx45MinRelease))" />
</PackageGroup>
Run Code Online (Sandbox Code Playgroud)
(出于某种原因,我必须定义NetFx45MinRelease自己,即使它应该包含在WixNetFxExtension中.)
如何正确设置?
我有一个命令Get-Testdata,它从不同的源检索测试数据,并将这些数据存储为PSObject具有不同值的属性.然后将对象的总数存储为数组,以便于操作,排序,计算等.
我的问题是我希望能够将这些数据呈现为(颜色编码的)HTML,我为此编写了另一个命令Show-TestResults.输入参数如下所示
[Parameter(Mandatory=$true,Position=0,ValueFromPipeline=$true)]
[PSObject[]]$InputObject
Run Code Online (Sandbox Code Playgroud)
更新1
这个函数本身是非常基础的,它只是设置了一些参数ConvertTo-HTML,然后将对象传递给该命令:
$head = "<style>[...]" #styling with javascript etc
$header = "<H1>Test Results</H1>
$title = "Test results"
$InputObject | ConvertTo-HTML -head $head -body $header -title $title | Out-File $Filename
Run Code Online (Sandbox Code Playgroud)
END UPDATE 1
但是,当我尝试使用该ValueFromPipeline属性时,使用该调用
Get-Testdata [...] | Show-TestResults
Run Code Online (Sandbox Code Playgroud)
仅显示数组中的第一个对象.但是,如果我改为调用命令
$td = Get-Testdata [...]
Show-TestResults $td
Run Code Online (Sandbox Code Playgroud)
正如预期的那样呈现整个阵列.有人可以解释一下 - 并希望引导我纠正它吗?
我有一个与MSI一起打包的应用程序,它与各种必需的第三方工具一起制作成WiX软件包.我已经在MSI du中禁用了应用程序如何工作的修改和修复操作,要求在再次安装相同版本之前完全卸载.
当我单独运行MSI时,它按预期工作:安装程序无法运行两次.再次运行完全相同的Bundle时也是如此.但只需重建捆绑包(使用相同UpgradeCode和Version),安装就会继续进行(这次要快得多),最终我在已安装的程序中重复输入.我真的想阻止它并使捆绑工作为MSI.
我已尝试在捆绑上设置各种条件; NOT WixBundleInstalled,WixBundleInstalled != 1等,但这些方法都似乎工作.
作为参考,这是bundle声明:
<Bundle UpgradeCode="{FAF9CBDD-BE89-4B18-9921-FD5B426B5B0C}" IconSourceFile="$(var.SolutionDir)Resources\product.ico"
Name="Product 4.4" Version="4.4.0.0" Manufacturer="My Company" DisableModify="yes" Condition="NOT (WixBundleInstalled = 1)">
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用每台机器和x64架构设置在WiX 3.6中编写Windows Installer脚本.我有以下项目结构(缩短):
<Directory Id="ProgramFiles64Folder" Name="PFiles">
<Directory Id="APPLICATIONFOLDER" Name="My Company">
<Directory Id="ProductFolder" Name="My Product">
<Component Id="MainComponent" Guid="" Win64="yes" KeyPath="yes">
...
</Component>
<Directory Id="DataFolder" Name="Data">
<Directory Id="Machine" Name="Machine" >
<Directory Id="MachinesFolder" Name="Machines">
<Component Id="Machine1" Guid="{74341536-72DF-48C3-95E8-2851D9FA8318}" Win64="yes" KeyPath="yes">
...
</Component>
</Directory>
<Directory Id="TemplateFolder" Name="Template">
<Component Id="TemplateFiles" Guid="{A0D0C225-D604-4B84-971D-41687A30EC36}" Win64="yes" KeyPath="yes">
<File Id="Template1.rsbak" Source="$(var.SolutionDir)bin\Release\File1.rsbak" />
...
</Component>
</Directory>
</Directory>
</Directory>
</Directory>
</Directory>
</Directory>
Run Code Online (Sandbox Code Playgroud)
问题是我ICE38: Component TemplateFiles installs to user profile. It must use a registry key under HKCU as its KeyPath, not a …