1

特定のファイルをコピー/置換するだけで、クライアント コンピューター上のソフトウェアを更新する小さなユーティリティがあります。ファイルは、EXE と DLL の両方で構成されています。私たちの 1 つのクライアントを除いて、すべて正常に動作します。彼らは Active Directory ドメインを持っていますが (多くのクライアントがそうであるように)、すべてのコンピューターで DLL ファイルのコピーに失敗し、エラー コード 5 (アクセスが拒否されました) が表示されます。アプリケーションが管理者として実行されている場合でも、管理者としてコンピューターにログインしている間。XP、Vista、および 7 マシンのすべてで発生します。EXE ファイルは正常にコピー/置換されますが、DLL ファイルはコピー/置換されません。DLL が存在しない場合は、正常にコピーされます。ただし、交換が必要な場合は失敗します。

これらのファイルは、API 呼び出しを使用してコピーされます。

function CopyFile(lpExistingFileName, lpNewFileName: PWideChar; bFailIfExists: BOOL): BOOL; stdcall;

ソースは自己解凍型パッケージによって自動的に作成される一時フォルダーであり、宛先はソフトウェアがインストールされている場所です (レジストリ キーによって識別されます)。宛先は、最も一般的には C: ルートのディレクトリですが、Program Files (x86) やコンピューター上の他の場所でも発生します。彼らの IT 担当者は、これをブロックするためにドメインに構成された特別な設定はないと主張しています。これは、この問題を抱えている唯一のクライアントであり、20 台以上のコンピューターすべてで発生しています。ただし、Windows からファイルを手動でコピーすると、ファイルは問題なくコピー/置換されます。これらのファイルの属性を確認しましたが、非表示または読み取り専用ではありません。

適切なアクセスを確保するために他に何をする必要がありますか? 管理者として実行してもうまくいかないのでしょうか?

4

1 に答える 1

2

procMon を使用して更新ユーティリティをトレースします。ACCESS_DENIED エラーが表示されるはずです。それらを分析します。なりすましに注意してください。また、ソフトウェア IPS、「Angry」アンチウイルスを使用しているかどうか、またはソフトウェアの復元/AppLocker を構成しているかどうかも尋ねます。最後のものはあなたの問題とはあまり関係がないかもしれませんが、試してみてください。問題になる可能性は低いですが、ユーティリティが 32 ビットでマニフェストがない場合、OS (Vista 以降) によってサイレントにリダイレクトされる可能性があります。

更新: プログラムが古すぎる場合 (つまり、ソフトウェア/データの場所に関する MS の推奨事項に準拠していない場合)、MS ACT (Microsoft Application Compatibility Toolkit (ACT))が役に立ちます。

于 2013-05-20T16:57:05.190 に答える