7

私はしばらくこれに頭を悩ませてきましたが、最終的に(多くの検索の後)陥り、助けを求めてスタックオーバーフローに来ました。

タイトルが示すように、権限の昇格を必要とせずにユーザーごとのインストールを実行できるインストーラーを作成しようとしています。

ただし、次のコードでは、コンパイル時に多数の ICE38 および ICE64 エラーと ICE91 警告が生成されます。

    <Directory Id="TARGETDIR" Name="SourceDir">
      <Directory Id="AppDataFolder">
        <Directory Id="AppRootDirectory" Name="[Manufacturer]">
          <Directory Id="INSTALLFOLDER" Name="[ProductName]" />
        </Directory>
      </Directory>
    </Directory>

    <Feature Id="ProductFeature" Title="ATestProject" Level="1">
      <ComponentGroupRef Id="modules" />
    </Feature>

「モジュール」は、heat.exe によって生成された .wxs ファイルの内容を指し、そのコンポーネントのインストール ディレクトリは「INSTALLFOLDER」です。

インターネットで入手できる解決策は、これを機能させるために私の modules.wxs ファイルを何度も編集していることを示しています。これは受け入れられません。ビルド時またはスクリプトでのコマンド ライン) はまったく問題外です。

前もって感謝します!

4

1 に答える 1

10

Windows 7 以降ではデフォルトで %localappdata%\Programs にインストールされるユーザーごとのインストールを設定するには、次の手順を実行します。

<Property Id="ALLUSERS" Secure="yes" Value="2"/>
<Property Id="MSIINSTALLPERUSER" Secure="yes" Value="1" />

<Directory Id="TARGETDIR" Name="SourceDir">
  <Directory Id="ProgramFilesFolder">
    <Directory Id="AppRootDirectory" Name="Manufacturer">
      <Directory Id="INSTALLFOLDER" Name="ProductName" />
    </Directory>
  </Directory>
</Directory>
<!-- ... -->
<!-- ... -->
<Feature Id="ProductFeature" Title="ATestProject" Level="0">
  <ComponentGroupRef Id="modules" />
</Feature>

基本的に、上部にある 2 つのプロパティを設定すると、インストーラーは「ユーザーごと」のインストールに構成されます。これは、UAC にやさしく、昇格されたアクセス許可を必要としません。詳細な説明については、これを参照してください。

また、ProgramFilesFolder が %localAppData%/programs になることにも注意してください。これは、C:\Program Files (x86)\ ではなく、ユーザーごとのアプリケーションおよびユーザー プロファイルにインストールするための Microsoft のデフォルトの保存場所です。

于 2013-09-09T14:18:19.023 に答える