2016-10-21 6 views
8

私はWindows 10 PCにc#アプリケーションを持っています。インストールフォルダ(C:\ Program Files(x86)\ xxx)には設定ファイルがありますが、ユーザーが管理者権限を持っていなければ編集できません。問題は、Windowsがこれらの設定ファイルをVirtualStoreにコピーしてそこにあるすべての読み込みをリダイレクトしているのに対し、Adminと同じアプリケーションを実行するとProgram Filesフォルダの元の設定ファイルが見えるということです。VirtualStoreをスキップし、Program Filesフォルダ内のファイルを読み込む方法は?

私の質問:管理者として実行されていないときでも、アプリケーションにプログラムファイルの元のファイルが表示されるようにする方法はありますか?私はちょうどそれらを編集するのではなく、それらを読みたい。

+0

あなたがそれらを読んでいるだけの場合、そのファイルのコピーバージョンを読むことに何が問題になりますか? – ChrisBint

+0

adminとして実行すると編集できますが、この場合は仮想ストアのバージョンではなく、プログラムファイルフォルダのバージョンが編集されます。したがって、非管理インスタンスの観点からは、ファイルは変更されません。 – Sugrue

+0

ファイルをどの時点でコピーしますか? – ChrisBint

答えて

7

Program Files (x86)フォルダからファイルを読み取るために昇格された権限は必要ありません。ファイルの読み込み方法を確認してください。共通ユーザーモードと昇格モードで異なるFileAccessフラグを指定する必要があります。特権でアプリケーションを実行するにはIsProcessElevatedメソッドを使用するかどうかを検出するには

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

:共通のユーザーモードではFileAccess.Read`で開かれるべきです。結果に応じて、適切なFileAccessモードを選択することができます。

+0

ありがとう - 私はファイルを正しく開いていることを再確認します。 – Sugrue

+1

@Sugrueアプリケーションのファイルトラフィックをよりよく理解するために、Sysinternalsスイートの[Process Monitor'](https://technet.microsoft.com/en-us/sysinternals/processmonitor.aspx)を使用することができます。アプリケーションによって要求された各ファイルに対して、必要なアクセス権が表示されます。 – Nikita

+1

こんにちはニキータ - 私たちは二重チェック - と私たちは、ファイルの誤って開いていたコードの別のセクションでばかげていた。すべて確定しました。ありがとう、 – Sugrue

1

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

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

これらのフォルダへのパスは、Windowsのバージョンによって異なります。 Windows Installerには、パスにプロパティが設定されています。アプリケーションには多くのインタフェースがあります。 1つのインタフェースについては、Working with Known Folders in ApplicationsおよびSHGetKnownFolderPathを参照してください。

それ以外の場合、Program FilesへのアクセスはUACの後です。あなたはすべての詳細を正しく取得するためにそれを読む必要があります。

関連する問題