0

Я разрабатываю приложение со встроенной смарт-картой (цифровая подпись). Давайте предположим, что у нас есть один и тот же код в этих двух контекстах:Различия в разрешении между службой Windows и консольным приложением

  • консольного приложение, выполняемого пользователем Administrator
  • Windows Service, выполняемого пользователем Administrator

Я suposed, что если эти два кода были выполненные тем же пользователем, у них будут одинаковые привилегии. Кажется, что это не так. Когда я пытаюсь с службой Windows (Выполненный с пользователем Administrator) я получить

TargetInvocationException 
CryptographicException 

Can't initialize DLL provider at System.Security.Cryptography.Utils.CreateProvHandle(. 

Насколько я читал в интернете, может быть, некоторые король выдачи разрешений. Консольное приложение работает нормально.

  • В чем разница между службой Windows и консольным приложением, если они выполнены одним и тем же пользователем?

  • Можно ли добиться таких же результатов с помощью службы Windows?

Бесплатного виртуальное пиво для человека, который решает его;)

Спасибо!

ответ

1

Пробовали ли вы использовать свою службу как локальную службу, сетевую службу и локальную систему? Разница с их изменением? Я знаю, что мне нужно было изменить мою локальную службу на локальную систему, чтобы получить доступ к моим файлам. Не уверен, что вы даже используете какие-либо файлы, но, по крайней мере, это что-то проверить.

+0

Хорошо, спасибо Брэнди, что сработало! :). Проблема в том, что я не знаю почему. Я перешел на другого пользователя, потому что у службы сети нет доступа к сертификату. В некотором роде я не понимаю, сертификат закончился в папке: - c: \ windows \ system32 \ config \ systemprofile \ application data \ microsoft \ systemcertificates \ my \ certificates Нравится этот файл находится в этой папке папка может работать с локальной службой, и я не получаю ошибку:.? - Невозможно инициализировать поставщик DLL в System.Security.Cryptography.Utils.CreateProvHandle ( Кто-нибудь знает, как этот файл закончился в этой папке Спасибо, Брэнди! – user256038

0

У меня нет решения для вас, к сожалению, но службы Windows действительно ведут себя совершенно иначе, чем обычные программы. Например, вы не сможете получить доступ к сетевым дискам из службы Windows, если ваша служба не запускается ПОСЛЕ службы, которая инициализирует эти диски.

Вы можете добавить зависимости к вашему сервису, чтобы они зависели от нужных вам услуг или в самом конце. Это МОЖЕТ решить вашу проблему, но я не могу этого гарантировать.

+0

Thanks Callash, спасибо большое. К сожалению, моя служба запускается вручную, поэтому все возможные зависимости разрешаются раньше. – user256038

+0

Если вы всегда запускаете свою услугу вручную, то в чем смысл иметь ее как услугу Windows, в первую очередь, если вы не возражаете против моего запроса? –

+0

Да, хороший вопрос;). Я запускаю вручную сервис только для целей тестирования. На рабочем сервере его нужно запускать автоматически :). – user256038

0

Одно из отличий между консольным приложением и сервисом Windows, которое вызвало у меня головные боли, состоит в том, что служба Windows использует C: \ Windows \ System32 как текущий каталог. Я не знаю, поможет ли это в вашем случае, но я думаю, вы могли бы попробовать: http://igorbrejc.net/development/c/windows-services-and-working-directories

+0

Можете ли вы опубликовать все описание исключения (включая трассировку стека)? –

+0

Я публикую его в новом ответе, спасибо :) – user256038

Смежные вопросы