Параметры в ClickOnce

Возможно ли каким-либо образом добавить/изменить файл .application (или другой способ) файла развертывания ClickOnce, чтобы можно было указать параметры без необходимости передачи параметров через URL?

Сборка может быть скомпилирована во время выполнения/переписана/etc или указана иначе, я не беспокоюсь о границах "что еще" мне нужно было бы сделать.

Ответ 1

В прошлом месяце я задал этот вопрос команде продуктов ClickOnce, и они сказали, что это можно сделать. Предполагая, что вы нацеливаете .NET 3.5 SP-1, вы можете передать аргументы в файл appref-ms (ярлык в меню "Пуск" ).

MyApp.appref-ms "my arguments"

Затем вы можете получить их, используя следующую команду:

string[] activationData = AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData;

Ответ 2

Нет, я не думаю, что это можно сделать. Вы можете рассмотреть возможность добавления параметров в файл app.exe.config и их чтение с классом System.Configuration.ConfigurationManager в вашем приложении.

Вы можете использовать инструмент mageui SDK для повторной подписи приложения и манифеста развертывания после изменения содержимого файла .config.

Ответ 3

Взгляните на эти две ссылки для действительно тщательного анализа того, что и как вы можете общаться между сайтом, с которого вы запускаете приложение clickonce и само приложение.

Основной метод заключается в динамическом изменении файлов манифеста на веб-сервере, с которого запускается приложение (и помните, что эти файлы манифеста должны быть переписаны после их изменения).

Хотя он все равно не позволит вам передавать "параметры" как таковой, вы можете смоделировать "параметры" динамически, включая дополнительный файл конфигурации, который ваше приложение может прочитать при запуске.

Ответ 4

Другим подходом может быть загрузка любых параметров/конфигурации, которые вам понадобятся при вызове веб-службы (или аналогичных) при запуске приложения.

Таким образом, вы можете централизованно управлять параметрами, а не внедрять их в приложение.

Вы всегда можете реализовать какое-то локальное кэширование, если вы не хотите, чтобы каждый раз, когда вы запускаете приложение, каждый раз, когда вы запускаете приложение, вы не хотите, чтобы производительность попадала в вызов веб-службы.