2012-03-22 4 views
0

У меня есть приложение: TexturePacker. Если я нажму на значок приложения в папке приложения, он запустит gui. Если я нахожу «texturepacker» в терминале, он запускает версию командной строки.Как запустить программную версию приложения из командной строки программно?

Я хочу программно запустить версию командной строки! Когда я использую приведенный ниже код, он запускает графический интерфейс. Какую команду оболочки я должен использовать, чтобы приложение (версия командной строки) запускалось, как если бы я набрал «упаковщик текстур» в терминале.

NSTask *theProcess = [[NSTask alloc] init];  
[theProcess setLaunchPath:@"/usr/bin/open"]; 

[theProcess setArguments:[NSArray arrayWithObjects: 
           @"-a", 
           @"/Applications/TexturePacker.app", 
           nil]]; 
      // Arguments to the command: the name of the 
      // Applications directory 

      [theProcess launch]; 
      // Run the command 

      [theProcess release]; 

Если это вопрос с вопросом. Я извиняюсь. Я нооттастичен. : S

РЕДАКТИРОВАТЬ: Извлечь часть его. Мне нужно было указать путь к двоичному файлу внутри приложения, чтобы запустить его. Но как передать аргументы? Если я добавлю больше аргументов в массив, оболочка предполагает, что это аргумент команды «open». Если я добавлю его в строку с конвейером для пакета текстур, оболочка говорит, что приложение не найдено. : S

+0

Почему вы используете '/ USR/BIN/open' для запуска программы? Для запуска такой командной строки вы должны установить путь запуска NSTask к бинарнику texturepacker, а затем вы можете просто setArguments получить массив, содержащий аргументы для texturepacker. – tcovo

+0

Если вы действительно хотите использовать '/ usr/bin/open', вы можете передать аргументы texturepacker, добавив их в массив, но отделенные от предыдущих аргументов« -args »(см. Документацию по [open] (https://developer.apple.com/library/mac/#documentation/Darwin/Reference/Manpages/man1/open.1.html)). Но я не думаю, что «открытость» уместна в этой ситуации. – tcovo

+0

Вы правы! Я должен получить доступ к двоичному файлу напрямую, а затем передать аргументы. Если вы ответите на вопрос, я отметю его правильно! : D Спасибо. –

ответ

2

Для запуска исполняемой программы нет необходимости использовать open. Вы можете установить запуск путь NSTask к вашему texturepacker двоичном, а затем вы можете setArguments на массив, содержащий аргументы для texturepacker:

NSTask *theProcess = [[NSTask alloc] init]; 

[theProcess setLaunchPath:@"/path/to/texturepacker"]; 

// Set arguments for invoking texturepacker 
[theProcess setArguments:[NSArray arrayWithObjects: 
           @"-x", 
           @"-y", 
           @"-z", 
           nil]]; 

// Run the task 
[theProcess launch]; 

[theProcess release]; 
+0

Yay! Ты прав! :) –