Развертывание приложения C # с UAC - PullRequest
2 голосов
/ 14 февраля 2011

Мы создаем приложение на C # .net, которое использует файл .dll, разработанный на C ++.Для этого также требуются некоторые пользовательские элементы управления, разработанные сторонней организацией (связанные с приложением как .dll). Если мы запустим это приложение на компьютере с включенным контролем учетных записей, оно будет выполнено, как и ожидалось.Однако, если мы развернем его с помощью установщика, созданного в рамках проекта развертывания Visual Studio, произойдет сбой.Если установлен исполняемый файл «Запуск от имени администратора», он работает.Кроме того, если к исполняемому файлу C # добавлен манифест, требующий прав администратора, он прекрасно работает после установки, однако UAC запрашивает разрешение при каждом запуске exableable.Есть ли что-то, что может быть указано, чтобы всегда запускаться от имени администратора без всплывающего окна UAC каждый раз, или установщик изменился так, что для него не требуются права администратора для запуска после установки (поскольку приложение, если оно запускается без установки, не требует прав администратора)?

Ответы [ 3 ]

3 голосов
/ 14 февраля 2011

Очевидно, что вы не можете работать от имени администратора без приглашения UAC.Это сделало бы жизнь создателей вредоносных программ слишком легкой.Обычно это каталог \ Program Files \, и это также его рабочий каталог по умолчанию.Тем не менее, программа может не писать там, когда работает под учетной записью без прав администратора.Возможно ли DLL пытается записать в текущий рабочий каталог?

0 голосов
/ 14 февраля 2011

Как уже было сказано, во время запуска приложения невозможно обойти запрос UAC, если в манифесте приложения запрашиваются права администратора.

Однако вы можете использовать обходной путь: во время установки установите разрешения на запись для всехв файле журнала или папке.

Обратите внимание, что это не «чистое» решение.Вместо этого вы должны изменить код DLL для входа в другое место.

0 голосов
/ 14 февраля 2011

на самом деле есть решение. Депортируйте ваш код, который требует повышения прав к службе Windows. Затем ваше приложение может выполнять вызовы к вашей службе для запуска команд с повышенными правами (с использованием WCF, RPC, удаленного взаимодействия или чего угодно).

Но вы должны быть осторожны:

  • это может быть дыра в безопасности, потому что программа без повышенных прав потенциально может запросить работу с повышенными правами . Если ваше приложение содержит ошибки или недостаточно проверяет данные, это может быть опасно.
  • ваш сервис всегда будет работать
  • ваш сервис будет работать с определенным идентификатором пользователя или встроенным. Процесс не получит идентификацию зарегистрированного пользователя. Я думаю, что делегация не будет работать без UAC.
...