我有以下为单一包创作编写的Wix XML代码。问题是在UI(WixUI_Advanced)中选择“安装所有机器下”模式时,UI中显示的默认位置是“C:\ Users \ XXXX \ AppData \ Local \ Programs \ MyApp \“。 如何更改此设置,以便默认位置为.. \ Program Files(x86)\ MyApp ....
如果我改变<Property Id="MSIINSTALLPERUSER" Value=" "/>,
然后默认位置是.. \ Program Files(x86)..,但由于缺少管理员权限,每个用户不起作用。
非常感谢。
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
xmlns:netfx="http://schemas.microsoft.com/wix/NetFxExtension"
xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
<!--Product Information-->
<Product Id="*"
Name="$(var.ApplicationName)"
Language="1033" Version="!(bind.FileVersion.$(var.ExecutableName))" Manufacturer="$(var.ManufacturerName)"
UpgradeCode="33bc2348-****-****-****-ebcde0d14afe">
<!--MSI Package Information-->
<Package InstallerVersion="500"
Compressed="yes" />
<!--Single Package Authoring-->
<Property Id="MSIINSTALLPERUSER" Value="1"/>
<Property Id="ALLUSERS" Value="2"/>
<!--Upgrade Information-->
<MajorUpgrade DowngradeErrorMessage="A newer version of $(var.ApplicationName) is already installed." />
<MediaTemplate EmbedCab="yes" />
<!--Application Features-->
<Feature Id="CoreFeature" Title="$(var.ApplicationName)" Level="1">
<ComponentGroupRef Id="ProductComponents" />
<ComponentRef Id="ApplicationShortcut" />
<ComponentRef Id="RegisterApplicationAutoStart" />
</Feature>
<!--Required .NET Framework for the Application-->
<PropertyRef Id="NETFRAMEWORK35" />
<Condition Message="This application requires Microsoft .NET Framework 3.5 or greater. Please install the .NET Framework then run this installer again.">
<![CDATA[Installed OR NETFRAMEWORK35]]>
</Condition>
<!--Advanced UI-->
<Property Id="ApplicationFolderName" Value="$(var.ApplicationName)" />
<Property Id="WixAppFolder" Value="WixPerMachineFolder" />
<UIRef Id="WixUI_Advanced"/>
<InstallExecuteSequence>
<Custom Action="LaunchApplication" After="InstallFinalize">NOT Installed</Custom>
</InstallExecuteSequence>
</Product>
<Fragment>
<!-- Define the Target Directory. The individual files will be filled in via a Heat generated fragment. -->
<Directory Id="TARGETDIR" Name="SourceDir">
<!--Define the directory when the application will be installed-->
<Directory Id="ProgramFilesFolder">
<Directory Id="APPLICATIONFOLDER" Name="$(var.ApplicationName)" />
</Directory>
</Fragment>
<Fragment>
<Component Id="RegisterApplicationAutoStart" Directory="ApplicationProgramsFolder" Guid="*">
<RegistryValue Root="HKMU"
Key="Software\Microsoft\Windows\CurrentVersion\Run"
Name="$(var.ApplicationName)"
Type="string"
Value="[APPLICATIONFOLDER]$(var.ExecutableName)"
KeyPath="yes" />
</Component>
</Fragment>
</Wix>
答案 0 :(得分:1)
请点击以下链接 http://wixtoolset.org/documentation/manual/v3/wixui/dialog_reference/wixui_advanced.html
对于每台计算机的安装,默认安装位置为
[ProgramFilesFolder][ApplicationFolderName]
用户可以在设置界面中更改它。
对于每用户安装,默认安装位置为
[LocalAppDataFolder]Apps[ApplicationFolderName]
用户将在设置界面中无法更改。
您可以将每个用户设置为0以强制每台计算机安装 - 或在程序文件
中<WixVariable Id="WixUISupportPerUser" Value="0" />
对于每台机器安装,您将需要管理员权限,如果用户没有管理员权限,他只能访问其本地应用程序数据文件夹,因此无法更改该位置。
答案 1 :(得分:1)
如果要安装到Program Files文件夹,则需要您是管理员。受限用户无法在该文件夹中创建或更新文件,并且运行MSI安装不会因为安装而破坏安全性。所以答案是你不能安装到ProgramFiles,除非你让MSI要求提升权限。您的问题基本上是&#34;有限的用户如何通过添加或替换Program Files文件夹中的文件来破坏安全性,并且没有办法回答这个问题。
您的应用是否需要提升权限才能运行?它有海拔清单吗?如果答案是肯定的,那么我怀疑你是否仍然需要提升安装权限。
答案 2 :(得分:1)
我在WiX安装程序中包含以下行修复了我的问题。
int solution, num1, num2;
对于每台计算机的安装,这会将设置为C:\ Users \ XXX \ AppData \ Local .....的ProgramFilesFolder的值更改为C:\ Program Files(x86)。
此外,上述代码行对每个用户的安装没有任何影响,安装仅在该用户文件夹中进行(根据需要)。
答案 3 :(得分:1)
OP完美地描述了它。通过以下方式启用单一创作,似乎无法在ProgramFilesFolder
获取“实际”C:\Program Files (x86)\
。
<Package InstallerVersion="200" ... /> <!-- do not specify InstallScope or InstallPrivileges! -->
<Property Id="ALLUSERS" Value="2" />
<Property Id="MSIINSTALLPERUSER" Value="1" />
即使MSIINSTALLPERUSER
被重置,也不会更改ProgramFilesFolder
的值,它仍然是C:\Users\XXX\AppData\Local\Programs
(我假设在安装程序启动时通过SHGetFolderPath
初始化文件夹,并且此后不会改变)。
在他的回答中明确地设置ProgramFilesFolder
就像他的回答一样,我猜,但这是一个丑陋的黑客。最终对我有用的是从'perMachine'模式开始:
<Property Id="ALLUSERS" Value="2" />
<Property Id="MSIINSTALLPERUSER" />
之后,如果安装者选择'perUser'模式,我会相应地设置变量:
<Publish Dialog="MyWelcomeDlg" Control="Next" Property="MSIINSTALLPERUSER" Value="1">1</Publish>
<Publish Dialog="MyWelcomeDlg" Control="Next" Property="ALLUSERS" Value="{}">1</Publish>
这样,文件夹将被正确设置。
我认为潜在的问题是ProgramFilesFolder
将永远设置为AppData
中的内容,这几乎没有任何意义。