1

UAC を有効にして開発したアプリケーションを長い間実行するのに深刻な問題がありました。

インストールすると (インストーラーは UAC でほとんどすぐに失敗します)、UAC をオンにしてアプリケーションを動作させることができるように見えます。ただし、しばらくすると、作成したばかりのファイルが見つからないという奇妙なエラーで動作しなくなります。

これをまっすぐにするために:

管理者としての XP: 結構です  
制限付きユーザーとしての XP: 結構です
Vista の UAC 管理者なし: 結構です
Vista no UAC limited: 良い
Vista UAC 管理者: 失敗
Vista UAC 限定: 失敗

このソフトウェアには、どこにも権限チェックが含まれていません。ドキュメントを正しく理解していれば、制限付きユーザーとして機能するものはすべて UAC で機能するはずです。しかし、そうではないことが証明されています。

編集: 最初に表示されたよりもはるかに難しい問題を尋ねたことをお詫びしなければなりません。実際、フォルダーの仮想化で少なくとも 1 つのバグを発見しており、他にもバグがあると考えています。この時点で、それを実行するための唯一の合理的な希望は、制限されたユーザーとして実行できる API 呼び出しを見つけて、呼び出しプロセスとそれが (再帰的に) 生成するプロセスのフォルダー仮想化を無効にすることです。マニフェストを追加できない理由は、ソフトウェアが実際にはマシンごとに異なる可能性があるサードパーティ ソフトウェアを呼び出すためです。

4

3 に答える 3

4

Windows Vista でのファイル システムとレジストリの仮想化を調べます。アプリがファイル システムやレジストリの特定の部分を使用している場合、アプリが "動作" していることがわかります。つまり、API はエラーなしで成功しますが、そのデータは期待する場所に保存されません。特に、1 台のマシンで複数のユーザー間で共有されていたはずの多くの領域が範囲外になり、データは実際には現在のユーザーに固有のストレージに移動します。ユーザーが実際には同じデータを共有していないことは、しばらくしてからわかります。

この仮想化が起こらないようにする方法があります。http://msdn.microsoft.com/en-us/library/bb756929.aspxで説明されているように、アプリケーションが UAC を認識していることを示すマニフェスト ファイルを提供します 。

マニフェスト ファイルでどのレベルの権限を要求するかは、特に問題ではありません。それが存在するだけで、あなたのアプリは UAC を理解し、OS は賢く、ファイルシステムやレジストリの「特権」領域へのアクセスを仮想化しようとはしません。API 呼び出しは、それらにアクセスするために必要な特権を持っていない場合、単純に失敗します。これにより、デバッグがはるかに簡単になります。

于 2008-11-04T08:44:46.437 に答える
2

この間ずっと、うまくいく解決策を見つけました。

  1. Program Files 以外の場所にインストールします。これにより、すべての問題を引き起こしていると思われるファイルシステムの仮想化がうまく回避されます。

  2. アプリケーションの HLKM レジストリ キーで仮想化を無効にします。これにより、システム アップデートに関連する残りの 1 つの不具合が修正されます。

参考資料:http://msdn.microsoft.com/en-us/library/aa965884%28VS.85%29.aspx

于 2009-09-11T21:26:40.460 に答える
1

アプリケーションがファイルを書き込もうとしている場所は? Program Files の下のインストール場所に書き込もうとすると、奇妙なエラーが発生する可能性があります。これは、Vista ではここへの書き込みが許可されておらず、ここで作成されたファイルは実際には別の場所の仮想フォルダーに作成されるためです。彼らが期待する場所にいてください。

アプリケーションを XP 互換モードで実行してみてください。

于 2008-11-04T04:01:12.937 に答える