14

.net 2.0 で C# を使用しています

プログラム データを次のファイルに保存しています。C:\ProgramData\MyProgramName\fileName.xml

アプリケーションを一度インストールして実行した後、アンインストールし(アンインストール中に「プログラムデータ」からすべてのファイルを削除しています)、アプリケーションを再インストールして実行しました。

奇妙なことに、プログラム データ内のファイルが存在するかのようにアプリケーションが起動しました。つまり、データ ファイルが削除されたにもかかわらず、アプリに古いデータがあったということです。

実行時:

File.Exists("C:\ProgramData\MyProgramName\fileName.xml")

ファイルが存在しないことは確かにわかっていましたが、「true」になりました。

アプリケーションを管理者として実行したところ、ファイルが存在しなかったため、事態は奇妙になりました。

調査の結果、管理者権限なしでアプリケーションを実行すると、次のようになることがわかりました。

C:\ProgramData\MyProgramName\fileName.xml

私は得る

C:\Users\userName\AppData\Local\VirtualStore\ProgramData\MyProgramName\fileName.xml

実際、以前のインストールから存在していたファイルがありました (存在を知らなかったので、明らかに削除しませんでした)。


管理者権限なしでアプリを実行しているときにこれを停止する方法を教えてください。

VirtualStore フォルダーにファイルを自動的に作成したくありません。これを止めるために考えられるすべての方法について話し合ってください。

4

3 に答える 3

6

まず、これをすべてのユーザーに対してグローバルに保存する必要があるかどうかを自問してください。

その必要がない場合は、代わりにファイルを Application Data に保存します。パスは で取得できます。Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)常に確実にC:\Users\Username\AppData\Roaming\. ただし、このパスはユーザーごとに一意であることに注意してください。

あなたがしなければならないなら、あなたは運が悪いです。XP 以降の Windows では、管理者権限 (または UAC) を持たないすべてのユーザーのアプリケーション データを保存する信頼できる方法はありません。これは、パブリック ユーザーにデータを保存するようなものではありません (可能な場合と不可能な場合があります。今すぐ確認してください)。

于 2013-08-05T13:24:13.290 に答える