2

Vista SP1 で Windows サービス アプリケーションを使用していますが、ユーザーがその実行可能ファイルの名前を (実行中に) 変更してから再起動しているため、サービス マネージャーが exe を見つけられないため、次回の起動時に起動に失敗することがわかりました。名前が変更されたので、ファイル。

古いバージョンの Windows では、OS がファイルをロックしていたため、これを行うことができなかったことを思い出すようです。Vista SP1 でも、実行中に既存のファイルをコピーすることはできません。Windows はファイルが使用中であると報告します。これは理にかなっています。では、なぜ名前を変更できるようにする必要があるのでしょうか。Windows が exe から新しいコード ページをページインする必要があるが、起動後にファイルの名前が変更されている場合はどうなりますか? exeファイルなどの名前を変更しながらProcess Monitorを実行しましたが、Process Monは奇妙なことは何も報告せず、他のファイルと同様にファイル名を変更しただけでログに記録しました。

舞台裏で何が起こっているか知っている人はいますか?Windows が実行中のプロセスのファイル名 (またはそれに依存する DLL) の変更を許可するというのは、直感に反するように思えます。ここで何が欠けていますか?

4

6 に答える 6

3

あなたの概念は間違っています...ファイル名はfile-ioユニバースの中心ではありません...開いているファイルへのハンドルです。ファイルの名前を変更しても、ファイルはディスクの別のセクションに移動されません。ファイルは同じ場所にあり、開いているファイルの内部データ構造が同じ場所を指しているディスクの一部です。肝心なのは、あなたの観察が正しいということです。問題を引き起こすことなく、実行中のプログラムの名前を変更できます。名前を変更したら、実行中のプログラムと同じ名前で新しいファイルを作成できます。これは、ソフトウェアの実行中にソフトウェアを更新する場合に実際に役立つ動作です。

于 2009-04-28T20:28:44.333 に答える
2

ファイルがまだそこにある限り、Windows はファイルから読み取ることができます。重要なのは、名前ではなく、基になるファイルです。

XP マシンで実行中の実行可能ファイルの名前を喜んで変更できます。

于 2009-04-28T20:24:10.960 に答える
0

サービスがインストールされているディレクトリへの変更をサービスにリッスンさせることを検討する場合があります。名前の変更を検出すると、本来の名前に戻すことができます。

于 2009-04-28T20:56:57.310 に答える
0

ここでのファイルの概念には 2 つの側面があります。

  1. ディスク上のデータ- それが実際のファイルです。

  2. ディレクトリエントリと呼ばれる、そのデータに付けることができるファイル名(複数またはなし)。

名前を変更しているのはディレクトリ エントリで、同じデータを参照しています。Windows は、必要なときにデータにアクセスできるため、ユーザーがそうしてもかまいません。実行中のプロセスは、名前ではなくdataにマップされます。

于 2015-02-16T14:02:26.817 に答える
0

ばかげた質問かもしれませんが、ファイルの名前を変更する必要がないのに、なぜユーザーはファイルの名前を変更するアクセス権を持っているのでしょうか? しかし、ええ、良い答えが指摘しているように、アプリケーションが終了するまでファイルへの開いているハンドルが失われないため、許可されています。また、ファイルの名前を変更してアプリケーションを更新することが良い習慣であるとは確信していませんが、それにもいくつかの用途があります。

于 2009-04-28T20:46:54.960 に答える
0

.exeOS は、ファイルへのオープン ハンドルを保持します。ファイルの名前を変更すると、開いているハンドルを無効にすることなく、ファイルに関するファイルシステムのメタデータが変更されるだけです。そのため、OS がさらにコードをページングするときは、既に開いているファイル ハンドルを使用するだけです。

ファイルを置き換える(その内容を上書きする)ことはまったく別の問題であり、FILE_SHARE_WRITEフラグが設定されていない状態でOSが開くと推測しているため、他のプロセスは.exeファイルに書き込むことができません。

于 2009-04-28T20:36:09.543 に答える