簡體   English   中英

在 Objective-C 中使用 NSTask 參數的相對路徑

[英]Use a relative path with NSTask Arguments in Objective-C

除了 shell 腳本之外,我幾乎沒有任何編程經驗,但是我需要使用 launchd 調用二進制文件,並且由於 Catilina 中的安全更改,它看起來好像不能是 AppleScript .app、Automator .app,或鴨嘴獸 .app。 所有這三個都調用了某種 GUI 元素,並且在啟動時都不會工作。

我拼湊了一段代碼,可以編譯並調用我需要的腳本。 我把它捆綁了一個 .app,簽名,它工作正常。 但我非常想調用相對於二進制文件的腳本。

我怎樣才能調用相當於

[task setArguments:@[ @"../Resources/script" ]];

代替

[task setArguments:@[ @"/Full/Path/To/script" ]];

下面是 main.m 的全部內容

#import <Foundation/Foundation.h>
enter code here
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // insert code here...
       NSTask *task = [[NSTask alloc] init];
        [task setLaunchPath:@"/bin/zsh"];
        [task setArguments:@[ @"/Full/Path/To/script" ]];
        [task launch];
    }
    return 0;
}

順便說一句,我知道有更好的方法可以做到這一點,但我的目標不是擁有一個獲獎的應用程序,而是簡單地解決一個特定的問題。 非常感謝。

使用 NSFileManager獲取當前目錄

 
 
  
  NSString* path = [[NSFileManager defaultManager] currentDirectoryPath];
 
 

argv的第一個參數是二進制文件的路徑

任何一個

NSString *path = [NSString stringWithUTF8String:argv[0]];

或者

NSString *path = [[NSProcessInfo processInfo] arguments][0];

您應該為此使用NSBundle 特別是,您應該使用:

[[NSBundle mainBundle] pathForResource:@"script" ofType:nil]

如:

[task setArguments:@[ [[NSBundle mainBundle] pathForResource:@"script" ofType:nil] ]];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM