0

私のwinforms .net 2プログラムは、UACがオンになっているWindows 7で正常に動作します。プログラムはフォルダを読み書きしc:/program filesます。
プログラムをターゲット .net 4 に更新した後、同じプログラムが UAC の影響を受け、読み取り/書き込みができなくなりc:/program filesます。私は得るUnauthorizedAccessException

読み取り/書き込みが悪い習慣であることは知っていますがc:/program filesこの動作の原因は何ですか?

4

1 に答える 1

5

いいえ、それは不可能です。c:\program ファイルへの書き込みが突然禁止されるような一般的な Winforms または .NET Framework の変更はありませんでした。またはそれについては可能です。

考えられる唯一の説明は、以前に Visual Studio 2005 を使用していたということです。Vista サービス パックのない元の RTM バージョンです。これは Vistaより前に出荷されたため、プログラムが UAC と互換性があることを Windows に知らせるために必要なマニフェストを EXE にまだ追加していませんでした。そのマニフェストが Project + Add New Item、General、Application Manifest File でどのように見えるかを確認できます。必須のエントリは次のとおりです。

   <requestedExecutionLevel level="asInvoker" uiAccess="false" />

levelc:\program ファイルに書き込めるようにするには、属性を「requireAdministrator」に変更する必要があります。

そのマニフェスト エントリがないと、Windows はプログラムを、UAC をまだ認識していないレガシ プログラムとして扱います。したがって、c:\program files に書き込むことができるようですしかし実際には、Windows はファイル アクセスを分離ストレージにリダイレクトします。

マニフェストの変更は機能しますが、ユーザーがプログラムを頻繁に実行する場合、おそらくうまく受信されないでしょう。コードを UAC と互換性を持たせることがより良い解決策であり、代わりにファイルを AppData に書き込みます。

于 2013-08-06T19:58:39.693 に答える