2012-12-31 405 views
3

創建我創建使用DotNetZip具有下列選項的自解壓ZIP:傳遞命令行參數SFX與DotNetZip

var opts = new SelfExtractorSaveOptions(); 
opts.RemoveUnpackedFilesAfterExecute = true; 
opts.PostExtractCommandLine = "TestApp.exe"; 
opts.Flavor = SelfExtractorFlavor.ConsoleApplication; 
zip1.SaveSelfExtractor("TestAppSFX.exe", opts); 

是否有可能以命令行參數傳遞給我的自行解壓即會再被傳遞給提取後調用的控制檯應用程序?

即,我希望能像下面輸入的東西:

TestAppSFX.exe -flag

然後,我的控制檯應用程序TestApp.exe會收到-flag作爲參數。

這些參數將根據使用情況而有所不同,所以在創建SFX時指定它們不是一種選擇。

回答

2

我看了看源代碼,DotNetZip看起來不可能。我現在使用7zip來做這個here

我也發現這個question,這說明這可能與WinRar。

2

是的,你可以使用DotNetZip傳遞標誌,但你需要做一些工作。

您需要下載源代碼並修改CommandLineSelfExtractorStub.cs以接受您自己的自定義參數。一旦你完成了,你可以把它建立成一個新的stub exe。

要構建SFX你會做這樣的事情...

byte[] stub = GetStubExecutable(); //read in your new stub file 
output.Write(stub, 0, stub.Length); 

using (ZipFile zip = new ZipFile()) 
{ 
    String[] filenames = System.IO.Directory.GetFiles(Path.Combine(path,FilesFolder)); 
    // Add the rest of they files you'd like in your SFX 
    foreach (String filename in filenames) 
    { 
     ZipEntry e = zip.AddFile(filename, OutputZipFolder); 
    } 

    zip.Save(output); // save the zip to the outputstream 
}