web-dev-qa-db-ja.com

.Zipファイルから直接.exeファイルを実行することが推奨されないのはなぜですか?

ポータブルで使用するために.exeファイルを圧縮できると思いました。しかし、Windowsは、圧縮フォルダー内の他のファイルに依存している可能性があるため、機能しないと述べています。

Windows warning message

これは何を意味するのでしょうか? Zipファイルからプログラムを実行できないのはなぜですか?アプリケーションは、直接パスの代わりに相対パスを使用して、他のファイルにアクセスできます。

24
Phoenix

実行可能ファイル(.exe)は、適切な実行のために他のファイルに依存できます。たとえば、外部コードを実行するには、動的にリンクされたライブラリ(.dll)、構成用のテキストファイル(.ini、.txtなど)、またはデータ用のデータベースファイルが必要になる場合があります。

.Zipファイルなどのアーカイブ内から実行可能ファイルを実行すると、それらのファイルが抽出されず、プログラムが意図したとおりに動作しません。または、プログラムが実行され、別の場所にそれらのファイルが作成される場合もあります。その後、そのアーカイブを別のコンピューターに移動した場合、それらのファイルは存在しません。

アーカイブ内からプログラムを実行しても問題が発生しないと100%確信している場合は、メッセージを無視しても問題ありません。

74
Keltari

最近のWindowsでは、Zipファイルはフォルダーのように見えますが、これはほんの一部にすぎません。プログラムはopen('c:\foo.Zip\bar.txt','rb')のようなことはできません。

そのため、Zipファイル内のファイルをダブルクリックすると、Windowsはファイルを一時ディレクトリに抽出し、一時ファイルを開きます。

これにはいくつかの点で問題があります。まず、一時ファイルが変更された場合、変更はZipファイルに戻されません。 IIRC、Windowsは、一時ファイルを読み取り専用としてマークすることでこれを軽減します。第二に、ファイルが正しい相対位置で利用可能な他のファイルに依存している場合、それらは見つかりません。

多くの実行可能ファイルはサポートファイルに依存しているため、MSは警告を追加し、実行可能ファイルのみを抽出するか、Zipファイル内のすべてを抽出するかを選択できるようにしました。

ただし、プログラムデータファイルを変更してZipファイルに戻る方法を見つける方法がないという問題があるため、どちらも多くの「ポータブルアプリケーション」にはあまり適していません。

25
plugwash

Zipから.exeを実行すると問題が発生する理由はたくさんあります。

まず、前述のように、ファイルを「実行」すると、実際には一時的な場所に抽出されてから実行されます。

即時の問題は、EXEで圧縮された可能性のあるファイルが抽出されないため、アクセスできないことを意味します。これには、.exe、configファイル、さらにヘルプファイルのような単純なものを実行するために必要なライブラリが含まれる場合があります。

また、必要なファイルを「思った」ようにすべてZipした場合でも(Zipファイルに)、これらはいくつかの方法で抽出されますが、最新のインストールには次のようなものが含まれていることがよくあります。

ライブラリ/ドライバーファイルの他のプログラム登録と共有される可能性があるため、他の場所に保存されているWindowsレジストリライブラリ/ドライバーファイルに追加されたデータ

それは単なる基本です

次に、他の潜在的な追加の問題(アクセス/ファイルの権利)があり、これらが欠落している可能性があり、その結果、プログラムが誤って実行される可能性があります。

次に、プログラムを実行しても、ほとんどの最新のアプリでは、将来の使用のために、なんらかの構成データを保存する必要があります。アプリは一時的な場所にあるため、削除される可能性が高く(作成されるファイルとともに)、とにかく見つけるのは事実上不可能です(はい、実際には不可能ではないことはわかっていますが、管理が容易ではありません)。そして、アプリによって作成されたものは、Zipに戻る方法を見つけられない可能性があることに注意してください。

したがって、設定の保存を必要としない自己完結型のアプリがなく、特にスタンドアロンアプリとして実行するように設計されている場合を除き、Zipから実行しないでください。

ポータブルなものを作成しようとしている場合は、通常、メモリスティックまたは仮想ドライブから実行するように設計されたアプリを使用することをお勧めします。

お役に立てれば。

4
Netspud2K