我正在嘗試編寫一個將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);
}
我更新了我的問題與錯誤消息...不幸仍然陷入困境,你有什麼想法嗎?感謝指南壽! – Silex 2013-05-04 09:29:39
好的......我知道了......我在終端上查了一遍正確的路徑,當我發現我留下了文件的擴展名......我寫道....../Wine和正確的語法應該是。 ../Wine.app!複製品現在我再次更新我的文章。現在試着用你的建議來運行exe文件! – Silex 2013-05-04 09:37:56
感謝您的指導,它對我有很大的幫助。所有提示都很有幫助!該應用程序現在可用:) – Silex 2013-05-04 11:55:16