Запуск "Справочника по приложениям"
Мне нужно мое приложение (Master), чтобы запустить другое приложение (Worker) для определенного события.
Если я распространю свое приложение Worker как стандартный исполняемый файл, то все будет хорошо, и я смогу без проблем использовать Process.Start и с радостью передать аргументы и вызвать WaitForExit.
Если я распространяю свое приложение Worker как приложение ClickOnce, оно создает ссылку на приложение, которую я могу запустить с помощью Process.Start (как только я помещаю его копию в тот же каталог, что и мой Master.exe), но не могу передать ему аргументы или используйте WaitForExit.
Я хочу быть в состоянии сделать оба. Я подозреваю, что вызов ссылки запускает другой процесс, в котором фактически выполняется исполняемый файл Worker.
Мой код:
// This works as I expect, and returns a valid Process.
Process p0 = Process.Start("Worker.exe", "DoSomeMagic");
// This seems to work, but returns null.
Process p1 = Process.Start("Worker.appref-ms");
// This also returns null, but does not pass the argument to Worker.
Process p2 = Process.Start("Worker.appref-ms", "DoSomeMagic");
Мой вопрос:
Как мне сделать это "правильно"?
1 ответ
Приложения ClickOnce не разрешают передачу аргументов командной строки (или, в их случае, аргументов по строке запроса) по умолчанию. Вам нужно настроить соответствующую опцию в файле манифеста, чтобы разрешить их, но даже в этом случае необходимо учитывать несколько предостережений. Вся платформа ClickOnce накладывает некоторые очень неприятные ограничения на то, как могут выполняться ваши приложения, а также на то, как их можно запускать. Конечно, все это под видом безопасности, но лично я думаю, что это близорукость.
Более подробная информация о том, как передавать аргументы в приложения ClickOnce: http://msdn.microsoft.com/en-us/library/ms172242.aspx