ファイルのコピー時にファイルのセキュリティ属性がめちゃくちゃになる

StackOverflow https://stackoverflow.com/questions/203036

質問

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

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

役に立ちましたか?

解決

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

通常、tempディレクトリはユーザープロファイル(通常は%TMP%と%TEMP%の両方がここを指す)の下にあるため、ここでファイルをコピーすると、そのユーザーのアクセス許可が与えられます。これらのファイルをプログラムファイルディレクトリに移動すると、そのユーザーだけがファイルを使用できるようになり、インストールユーザーのみが実行できます。

他のヒント

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top