2013-05-03 101 views
3

我正在嘗試編寫一個將wine和一些.exe文件包裝在一起的應用程序。該應用程序將掛載WineBottlerCombo_1.2.5.dmg文件,然後它應該將裝載的Wine的正確內容自動複製到應用程序文件夾。完成後,它應該運行一個.exe文件(由我指定)。爲Wine和一些.exe文件創建包裝應用程序

我的問題是:

  • 我如何掛上.dmg文件沒有自動打開安裝的.dmg文件
  • 我怎麼能安裝的.dmg文件的內容複製到應用程序文件夾
  • 畢竟這是做了,我怎麼可以和Objective-C的運行.exe文件

我真的在Objective-C初學者,但我試圖解決這個問題。我通過在Xcode中創建Cocoa應用程序來開始這項工作。在此之後我manged安裝.dmg文件與此代碼(壽它打開自動安裝的.dmg文件,將是巨大的,以阻止):

NSTask *task = [[NSTask alloc] init]; 
[task setLaunchPath: @"/usr/bin/hdiutil"]; 
[task setArguments: 
[NSArray arrayWithObjects: @"attach", @"/Users/<myusername>/Documents/temporary/WineBottlerCombo_1.2.5.dmg", nil]]; 
[task launch]; 
[task waitUntilExit]; 
if (0 != [task terminationStatus]) 
    NSLog(@"Mount failed."); 
[task release]; 

在此之後我試圖複製安裝的.dmg文件內容到此應用程序文件夾:

if([[NSFileManager defaultManager] isReadableFileAtPath: @"/Volumes/WineBottler Combo"]) { 
    [[NSFileManager defaultManager] copyItemAtPath: @"/Volumes/WineBottler Combo/Wine" toPath: @"/Volumes/WineBottler Combo/Applications" error:nil]; 
    [[NSFileManager defaultManager] copyItemAtPath: @"/Volumes/WineBottler Combo/WineBottler" toPath: @"/Volumes/WineBottler Combo/Applications" error:nil]; 
} 
else { 
    NSString* message = @"ERROR while moving file!"; 
    NSLog(@"%@", message); 
} 

不幸的是,這不會將這些文件移動到應用程序文件夾。我放棄了它,並進入if語句,所以它成爲現實,但沒有文件移動到應用程序文件夾。

這是我被困住的地方。我試圖搜索互聯網,但我還沒有得到任何信息,所以我想我在這裏問。

在此先感謝您的幫助。

編輯:

我查的NSFileManager copyItemPath第三個參數,它說以下內容:

2013-05-04 11:16:03.493 TestApp_MacOSX_installer[10284:303] Write failed with error: Error Domain=NSCocoaErrorDomain Code=260 "The file 「Wine」 couldn’t be opened because there is no such file." UserInfo=0x10015a530 {NSFilePath=/Volumes/WineBottler Combo/Wine, NSUnderlyingError=0x10015a430 "The operation couldn’t be completed. No such file or directory"}

我不知道爲什麼它說沒有這樣的文件或目錄,因爲程序安裝後,我在終端檢查了這條路徑,路徑是正確的,文件在那裏。

編輯編輯:

解決第一個編輯錯誤消息:

我注意到,我離開了,我想複製文件的擴展名。 所以正確的代碼如下所示:

if([[NSFileManager defaultManager] isReadableFileAtPath: @"/Volumes/WineBottler Combo"]) { 
    [[NSFileManager defaultManager] copyItemAtPath: @"/Volumes/WineBottler Combo/Wine.app" toPath: @"/Volumes/WineBottler Combo/Applications/Wine.app" error:&anyError]; 
    NSLog(@"Write failed with error: %@", anyError); 
    [[NSFileManager defaultManager] copyItemAtPath: @"/Volumes/WineBottler Combo/WineBottler.app" toPath: @"/Volumes/WineBottler Combo/Applications/WineBottler.app" error:nil]; 
    NSLog(@"Write failed with error: %@", anyError); 
} 
else { 
    NSString* message = @"ERROR while moving file!"; 
    NSLog(@"%@", message); 
} 

回答

2
  • 關於安裝:看man hdiutil,看起來你需要傳遞-nobrowse說法。
  • 複製:我建議你將第三個參數傳遞給方法(error:),看看它說什麼。
  • 要運行.exe文件,您可能需要運行傳遞.exe文件作爲參數的wine可執行文件。與第一種情況相同的方法:使用NSTask
+0

我更新了我的問題與錯誤消息...不幸仍然陷入困境,你有什麼想法嗎?感謝指南壽! – Silex 2013-05-04 09:29:39

+0

好的......我知道了......我在終端上查了一遍正確的路徑,當我發現我留下了文件的擴展名......我寫道....../Wine和正確的語法應該是。 ../Wine.app!複製品現在我再次更新我的文章。現在試着用你的建議來運行exe文件! – Silex 2013-05-04 09:37:56

+0

感謝您的指導,它對我有很大的幫助。所有提示都很有幫助!該應用程序現在可用:) – Silex 2013-05-04 11:55:16

相關問題