Проблема с сохранением реестра в развернутом приложении ClickOnce - PullRequest
2 голосов
/ 19 января 2011

Я разработал приложение на C # с возможностью запуска при запуске Windows, реализованной с использованием реестра (куст текущего пользователя).Когда я запускаю свое приложение из VS или из папки bin, эта опция работает.

Когда я создаю установщик ClickOnce (для запуска из Интернета) и помещаю его в Codeplex, после установки приложения эта опция не работает.Нет исключений, это только делает запись в реестр.Я предполагаю, что есть какая-то проблема безопасности.

Я попытался создать установщик ClickOnce с возможностью запуска из CD / локального хранилища, после того, как приложение установлено, оно работает.Он просто не работает после установки с помощью веб-установщика ClickOnce (поставлен на CodePlex).

Я посмотрел параметры публикации, там установлено значение по умолчанию = полное доверие.Я действительно не знаю, что делать сейчас, чтобы опция запуска при запуске работала.

Ответы [ 2 ]

3 голосов
/ 19 января 2011

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

Когда ваш пользователь запускает приложение, проверьте, задан ли ключ реестра, еслине запускать вышеупомянутое консольное приложение с повышенными правами .Пользователю будет предложено ввести права администратора, и операция записи должна завершиться успешно.

В вашем основном приложении необходимо добавить ссылку на консольное приложение.Для облегчения ссылки на сборку консольное приложение должно иметь как минимум 1 открытый класс, чтобы вы могли получить его тип и типы assemblyml, и, таким образом, вам не нужно использовать магические строки для получения имен файлов.Пример:

 Process.Start(
       new ProcessStartInfo
       {
           Verb = "runas",
           FileName = typeof(SomeClassInOtherAssembly).Assembly.Location,
           UseShellExecute = true,
           CreateNoWindow = true // Optional....
       }).WaitForExit();

Я также нашел этот хороший пост в блоге.

0 голосов
/ 20 января 2011

Вы должны быть в состоянии написать в HKCU (я могу сделать это успешно). Если хотите, опубликуйте код, который вы используете для записи записи в реестр, и я посмотрю.

EDIT

В этой статье блога показано, как программно читать и писать в / из реестра. Я развернул его с помощью ClickOnce, и он отлично работает.

http://robindotnet.wordpress.com/2010/05/31/enhanced-logging-in-clickonce-deployment/

Ваш код не выглядит для меня странным, но вы можете попробовать этот код и посмотреть, работает ли он (есть целые решения на VB и C # в конце статьи). Если это так, значит что-то не так с вашим кодом. Если это не сработает, то я не знаю, что тебе сказать.

...