0

自己解凍型のexeを作成しようとしています。作成しても問題ありません。私が問題に直面しているのは

  • exeファイルが存在する場所に抽出パスを設定する
  • 抽出したexeファイルを実行します。

2番目の部分では、抽出パスを正しくする必要がある可能性が最も高くなります。DotNetZipLibraryから次の変更されたコードを使用しています

zip.AddDirectory(DirectoryPath, "putty.exe");
zip.Comment = "This will be embedded into a self-extracting console-based exe";
SelfExtractorSaveOptions options = new SelfExtractorSaveOptions();
options.Flavor = SelfExtractorFlavor.ConsoleApplication;
options.DefaultExtractDirectory = "";
options.PostExtractCommandLine = "..\\putty.exe";
options.RemoveUnpackedFilesAfterExecute = true;
zip.SaveSelfExtractor("archive.exe", options);
4

1 に答える 1

4

2つの問題があります。

まず、あなたは電話しています

zip.AddDirectory(DirectoryPath, "putty.exe");

AddDirectory()メソッドは、ディレクトリをzipアーカイブに追加します。使用している2つの入力を受け入れるオーバーロードは、zipアーカイブ内のそのディレクトリに2番目の引数で名前を付けます。したがって、この呼び出しを行った後、zipアーカイブには、ファイルシステム上にあるすべてのファイルが含まれDirectoryPathます。zipアーカイブで使用されるルートディレクトリ名は「putty.exe」になります。これは、少なくともディレクトリの紛らわしい名前です。あなたはおそらくこれを意図していないと思います。

アーカイブにファイルを追加する場合は、AddDirectory()ではなくAddFile()を使用してください。


次に、ドキュメントによると、post-extractコマンドが実行されます

...抽出ディレクトリをプロセスの作業ディレクトリとして使用します...

したがって、zipのアーカイブのルートに「putty.exe」というファイルがある場合、実行するコマンドは「..\putty.exe」ではなく「putty.exe」である可能性があります。


開発中に、自己解凍型ファイルに保存する部分を取り出して、通常のzipファイルに保存するように置き換えることをお勧めします。作成したzipファイルを調べて、見た目どおりに見えることを確認します。正しく理解できたら、SaveSelfExtractor()パーツを元に戻すと、適切なSFXが得られます。

于 2011-10-04T15:30:55.177 に答える