У нас есть некоторый код C #, который программно использует оболочку Windows для копирования файлов (на самом деле, чтобы разархивировать их ... не спрашивать) через Shell32.Folder и Shell32.FolderItem (из сборки Interop.Shell32, которая, я думаю, просто тонкая обертка вокруг предметов оболочки). Код используется в двух разных контекстах, как сервисы, но в одном контексте он работает как LocalSystem, а в другом - как пользователь с ограниченными правами. На данный момент нам нужно, чтобы он работал в обоих контекстах, но в конечном итоге мы хотели бы запустить его только как пользователь с ограниченными правами.
Функциональность Shell32 отлично работает как LocalSystem, даже если флажок «Разрешить службе взаимодействовать с рабочим столом» не установлен, но, похоже, не работает вообще под определенной учетной записью пользователя (будь то ограниченный или администратор). Мы не смогли получить какую-либо информацию об ошибке - при входе в систему в качестве пользователя, от имени которого работает служба, не появляется никаких диалогов.
Я понимаю, что может быть плохой идеей использовать подобную оболочку из службы, но, отложив это на мгновение, результаты, которые я вижу, звучат правильно? Я не нашел какой-либо действительно точной документации, которая убедила бы меня в том, что это ограничение для учетных записей пользователей, но не для учетной записи локальной системы (опять же, при этом поток взаимодействия с рабочим столом не проверен). Я ожидал бы, что он потерпит неудачу в обоих контекстах или нет.
Любая информация по этому вопросу или ссылки на полезную информацию будут полезны. Лучшее, что я могу найти, - это заметка здесь , в которой говорится, что службы, работающие под учетными записями пользователей, получат "неинтерактивные" оконные станции, но там говорится то же самое о локальной системе без флага SERVICE_INTERACTIVE_PROCESS (который я предполагаю что делает флаг «Разрешить службе взаимодействовать с рабочим столом» в пользовательском интерфейсе службы.