WIXツールセット(3.10.3)を使用してインストールパッケージをビルドするプロジェクトを継承しました。アプリケーションは、共有データをダウンロードしてに保存しますc:\ProgramData\Vendor\ApplicationName
。ただし、このパスは、インストール中に作成されるのではなく、パスが初めて要求されるたびに、アプリケーション自体の実行中に作成されます。
複数のWindowsユーザーがアプリケーションを使用するときに発生するアクセス許可関連の問題を発見しました。アプリケーションがバックエンドから新しいデータファイルをダウンロードするときはいつでも、それらのファイルの「フルコントロール」権限を取得するのは現在のWindowsユーザーです。他の誰かが別のWindowsアカウントでログインすると、それらのファイルへの読み取り権限しかありません。また、これらの混合アクセス許可は、アプリケーションがローカルファイルをバックエンドと同期させようとするときに問題を引き起こします。
アプリケーションは昇格された特権を必要としないため、インストール中にこれを修正する必要があります。最初のステップとして、c:\ProgramData\Vendor\
インストール中にフォルダーが作成され、。を使用して正しいアクセス許可を取得することを確認しました<util:PermissionEx User="Everyone" GenericAll="yes" />
。これらの権限は継承されるため、新規インストールを行うすべてのユーザーの問題が解決されます。
問題は、アクセス許可がインストール後に作成されたフォルダー/ファイルによってのみ継承されることです。これは、以前のバージョンからアップグレードしたユーザーには、混合アクセス許可が残ったデータファイルが残っていることを意味します。したがって、インストール中に既存のすべてのフォルダーとファイルが新しいアクセス許可を取得することを確認する必要があります。どうすればこれを達成できますか?
わかりました、これは私がそれを解決した方法です。それが将来誰かを助けることができることを願っています。
まず、MSIのwxsファイルに次のものを追加しました。
<Directory Id="CommonAppDataFolder">
<Directory Id="ProgramDataVendorFolder" Name="MyVendor">
<!--This will create the \ProgramData\MyVendor\MyProductName\ folder. -->
<Directory Id="ProgramDataAppFolder" Name="MyProductName" />
</Directory>
</Directory>
<DirectoryRef Id="ProgramDataAppFolder">
<Component Id="CmpCreateCommonAppDataFolderWithPermissions" Guid="13ae94b7-9ef5-4181-bfa9-933844a13418" Permanent="yes">
<CreateFolder>
<!--This will ensure that everyone gets full permissions to the folder that we create in the ProgramData folder. -->
<util:PermissionEx User="Everyone" GenericAll="yes" />
</CreateFolder>
</Component>
</DirectoryRef>
そしてそれを含めました:
<Feature Id="ProductFeature" Title="$(var.ProductName)" Level="1">
<!--Add folder -->
<ComponentRef Id="CmpCreateCommonAppDataFolderWithPermissions" />
</Feature>
これらの3つのことにより、フォルダーが既に存在する場合でも、すべてのユーザーがProgramData内のフォルダーに完全にアクセスできるようになりました。
ただし、以前のアクセス許可の問題のためにファイルの仮想化がすでにアクティブになっている場合は、アクセス許可を変更するだけでは不十分です。ファイルの仮想化をオフにするために、次のコマンドを使用して実行可能ファイルにapp.manifestを追加しました。
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
以前に使用したVirtualStoreに重要なファイルが含まれている場合、それらはProgramDataフォルダーに自動的に表示されないことに注意してください。
ファイル/レジストリの仮想化に関する詳細については、https://blogs.technet.microsoft.com/mrsnrub/2010/08/11/uac-virtualization-allowing-standard-users-to-update-a-system-を参照してください。保護地域/
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加