Различия в разрешениях между службой Windows и консольным приложением - PullRequest
0 голосов
/ 02 июня 2010

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

  • Консольное приложение, выполненное администратором
  • Служба Windows, выполненная пользователем-администратором

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

TargetInvocationException
CryptographicException

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

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

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

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

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

Спасибо!

Ответы [ 3 ]

1 голос
/ 04 июня 2010

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

0 голосов
/ 02 июня 2010

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

0 голосов
/ 02 июня 2010

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

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

...