2015-10-19 31 views
2

我有以下Wix XML代碼,這些代碼是我爲單包創作編寫的。問題是在用戶界面(WixUI_Advanced)中選擇了「安裝這臺機器的所有底板」模式時,UI中顯示的默認位置是「C:\ Users \ XXXX \ AppData \ Local \ Programs \ MyApp \「。 我怎樣才能改變這一狀況,使默認位置爲.. \程序文件(x86)\ MyApp的....WiX安裝程序:單包創作(每臺機器:不安裝在程序文件中)

如果我改變<Property Id="MSIINSTALLPERUSER" Value=" "/>, 則默認位置是.. \程序文件(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> 

回答

1

請按照以下 http://wixtoolset.org/documentation/manual/v3/wixui/dialog_reference/wixui_advanced.html

的鏈接,每個機器安裝,默認安裝位置會

[ProgramFilesFolder][ApplicationFolderName] 

,用戶將能夠改變它的設置UI。

對於每個用戶安裝,默認安裝位置會

[LocalAppDataFolder]Apps[ApplicationFolderName] 

,用戶將無法改變它在設置UI。

您可以設置每個用戶0執行每臺機器的安裝 - 或程序文件

<WixVariable Id="WixUISupportPerUser" Value="0" /> 

對於每臺機器安裝,您將需要管理員權限,如果用戶不具有管理員權限,他只能訪問他的本地應用程序數據文件夾,因此該位置無法更改。

+0

我的問題是,每機安裝不[ProgramFilesFolder] [ApplicationFolderName]發生,取而代之的則是發生在 –

+1

感謝您的答覆。 我的問題是,每機安裝不[ProgramFilesFolder] [ApplicationFolderName]發生,而是正在發生的事情,在C:\用戶\ \應用程序數據\本地\程序。我無法弄清楚爲什麼這個默認的pah被改變了。 用戶可以更改此路徑,但如果他沒有,那麼它就會在上面安裝文件夾,它不適合其他標準用戶訪問。 –

1

如果您想安裝到Program Files文件夾,那麼您必須是管理員。有限的用戶無法創建或更新該文件夾中的文件,並且運行MSI安裝不會因爲安裝而破壞安全性。所以答案是你不能安裝到ProgramFiles,除非你讓MSI要求提升特權。您的問題基本上是「如何限制用戶通過添加或替換Program Files文件夾中的文件來破壞安全性」,並且無法回答這個問題。

您的應用程序是否需要提升權限才能運行?它是否具有高程清單?如果答案是肯定的,那麼我懷疑你是否需要提升特權來安裝它。

+0

我是安裝此應用程序的機器上的管理員。我的應用程序不需要提升的權限來運行,也沒有提升清單。 當<資源ID = 「MSIINSTALLPERUSER」 值= 「 」/>它安裝到C:\程序文件(x86)但沒有安裝用於每個用戶 當<資源ID =「 MSIINSTALLPERUSER」 值= 「1」 />它安裝到C:\ Users \ XXXX \ AppData \ Local \ Programs \ MyApp \。當我看着安裝程序的日誌文件安裝罰款,每用戶安裝 ,我認爲這是上述APPLICATIONFOLDER得到不同的值進行初始化。 –

1

我在修復我的問題的WiX安裝程序中包含以下行。

<SetDirectory Id="ProgramFilesFolder" Value="C:\Program Files (x86)\"></SetDirectory> 

這種改變正被設置到C ProgramFilesFolder的值:\用戶\ XXX \應用程序數據\本地.....到C:\ Program Files文件(x86)的每機器安裝。

而且上面的代碼行不使每個用戶安裝任何差異和安裝發生在只有該用戶的文件夾(如需要的話。)

1

的OP完美描述它。通過以下方式啓用單一創作,似乎無法獲得「實際」ProgramFilesFolderC:\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明確,如OP在他的回答顯示,將工作我想,但它是一個醜陋的黑客。到底是什麼工作對我來說是開始了「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,這使得幾乎沒有任何意義。

相關問題