1

Program Files ディレクトリの下の独自のフォルダーに書き込みたい小さなトレイ アプリケーションがあります。これが最終的な設計ではないことはわかっているので修正しますが、まずこれがどのように機能するかを理解したいと思います。

これを 32 ビット Vista マシンで実行すると、ファイルが VirtualStore に書き込まれ、正常に動作します。

しかし、これを Vista 64 ビット マシンにインストールすると、すぐに UnauthorizedAccessException が発生し、Program Files (および Program Files (x86)) 内のディレクトリに書き込もうとしました。

VirtualStore リダイレクトは、Vista 64 ビットでは機能しないようです。何か案は?

これは Visual Studio 2008 で作成された C# アプリで、FileStream obj を使用してストリームをディスクに永続化します。

4

3 に答える 3

1

したがって、すべてのプロジェクトをターゲット プラットフォーム x86 にコンパイルすることで、実際にこれを機能させることができました。そのため、x64 は Vista 64 の VirtualStore では機能せず、「任意の CPU」へのコンパイルも機能しません。そして、(構成マネージャーで) ソリューション全体に対して設定する必要がありましたが、個々のプロジェクトごとに設定するだけでは機能しませんでした。

AppDataフォルダーまたはIsolatedStorageを使用して書き換えます。助けてくれてありがとう!

于 2009-02-06T13:27:13.613 に答える
1

今すぐ修正します。とにかく、そのディレクトリに自分のものを書き込んではいけません。ガイドラインに違反しています。VISTA より前であっても、複数のユーザーが同時にサーバーにログオンしている場合、製品は動作しません。

Vista 64 ビットは、ユーザーが 32 ビット アプリであることを検出し、「Program Files」を変更しようとする試みを「Program Files x86」に自動的にリダイレクトします。実際、32 ビット システムで実行されていると完全に信じ込ませてしまいます (こちらを参照)。

このエミュレーション層には、Program Files の下にあるものを変更しようとするプログラムからの保護が強化されているのではないかと思います。または、ACL が Vista 64 ビット (またはエミュレーション層である可能性が高い) でより適切に設定されている可能性があります。

要するに、あなたがしていることをしないでください。Microsoft は長い間、そうしないように私たちに言い続けてきました。

于 2009-02-06T11:03:59.393 に答える
1

エラーに関する詳細情報をお持ちですか?
実行/アクセスエラーの監視にsysinternalsツールを使用していますか?
エラーのイベントビューアーも見てください。

于 2009-02-06T10:56:30.890 に答える