Запуск "Справочника по приложениям"

Мне нужно мое приложение (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

Другие вопросы по тегам