8

Windows 10 PC に ac# アプリケーションがあります。インストール フォルダー (C:\Program Files (x86)\xxx) に設定ファイルがあり、読み取りたいが、ユーザーが管理者アクセス権を持っていない限り編集したくない。問題は、Windows がこれらの設定ファイルを VirtualStore にコピーし、すべての読み取りをそこでリダイレクトしていることです。一方、管理者として実行されている同じアプリは、Program Files フォルダーにある元の設定ファイルを参照します。

私の質問: 管理者として実行していない場合でも、アプリケーションに Program Files 内の元のファイルを表示させる方法はありますか? 編集するのではなく、読みたいだけです。

4

2 に答える 2

7

フォルダーからファイルを読み取るために、昇格されたアクセス許可は必要ありませんProgram Files (x86)。読み取り用にファイルを開く方法を確認してください。FileAccess共通ユーザー モードと昇格モードでは、異なるフラグを指定する必要があります。一般的なユーザー モードの場合は、「FileAccess.Read」で開く必要があります。

using (FileStream settingsFile = new FileStream(@"C:\Program Files (x86)\xxx", FileMode.Open, FileAccess.Read))
{
  // Do the job
}

アプリケーションが昇格されたアクセス許可で実行されているかどうかを検出するには、IsProcessElevatedメソッドを使用します。結果に応じて、適切なモードを選択できFileAccessます。

于 2016-10-26T15:11:55.063 に答える
1

Program Files で元のファイルを表示する方法は、そこに書き込まないことです (そのためには、Nikita が指摘するように、ファイルを読み取り専用で開きます)。VirtualStore は使用するためのものではなく、アプリケーションの問題を修正するためのものです。このような問題は、たとえば、現在の Windows (NT 以降) が異なるユーザーから同時に複数のセッションを持つことができる場合に、古いシングル ユーザー Windows 用に作成された壊れたアプリケーションによって引き起こされます。

アプリケーションがすべてのユーザー間で共有されるデータ ファイルを変更する場合は、ファイルをすべてのユーザー プロファイルに保存する必要があります。ユーザー データの場合は、ユーザー プロファイルの Application Data フォルダーにデータを保存できます。アプリケーション データには、データをローミングまたはローカルにするかどうかのオプションが残っています。

これらのフォルダーへのパスは、Windows のバージョンによって異なります。Windows インストーラーには、パスに設定されたプロパティがあります。アプリケーションには、使用できる多くのインターフェースがあります。1 つのインターフェイスについては、アプリケーション内の既知のフォルダーの操作とSHGetKnownFolderPathを参照してください。

それ以外は、Program Files へのアクセスはUACの背後にあります。すべての詳細を正しく理解するには、それを読んでください。

于 2016-11-02T10:32:19.550 に答える