3

製品を更新する Windows サービスがあります。製品ファイルを一時ディレクトリ (通常は「C:\Windows\Temp」) にコピーし、バイナリにパッチを適用してから、再起動時に MoveFileEx を使用してファイルをインストール ディレクトリ (通常は「C:\Program Files\Product」) にコピーします。 "。インストール ディレクトリ内のファイルは、親フォルダからセキュリティ属性を継承しています。コピー、パッチ適用、および再起動後、インストール ディレクトリ内のファイルに一部の ACL がありません。具体的には、ファイルにはユーザー グループの ACL がないため、ユーザーは再起動後にプログラムを実行できなくなります。

ここで何が起こっているのか誰か説明できますか? インストール ディレクトリから一時ディレクトリにコピーすると、ファイルは一時ディレクトリの ACL を継承するようです。ただし、MoveFileEx/Reboot では、ファイルは、インストール ディレクトリと一時ディレクトリの両方に共通する ACL のみを継承します。

4

2 に答える 2

4

Windows では、ファイルをコピーすると、ファイルはコピー先ディレクトリの ACL を取得します。ファイルを移動すると、ACL は、そのディレクトリから継承する可能性のあるファイルを上書きします。MoveFileEx がファイルに対してどのように異なる動作をするかはわかりません。

通常、一時ディレクトリはユーザー プロファイルの下にあるため (通常、%TMP% と %TEMP% の両方がここを指します)、ここにファイルをコピーすると、そのユーザーのアクセス許可が付与されます。これらのファイルをプログラム ファイル ディレクトリに移動すると、そのユーザーの権限のみが取得されるため、インストールしているユーザーのみが実行できます。

于 2008-10-14T22:16:41.777 に答える
0

考えられる回避策の 1 つは、同じディレクトリ内にあるが名前が異なるファイルのコピーにパッチを適用することです。再起動後、パッチが適用されたバージョンをスワップインできます。または、最初に再起動してから、その場でパッチを適用し、手動ロールバックが必要な場合に一時ディレクトリにバックアップするだけです。

本当に別の場所に移動したい場合は、パッチを適用するファイルと同じ場所に一時フォルダーを作成すると、ディレクトリが継承されたアクセス許可を使用していると仮定して、アクセス許可を同じに保つことができます。

于 2008-10-14T22:26:48.200 に答える