Проблема полномочий, когда стартовое приложение.NET от сервиса.NET как другой пользователь?

Невозможно получить ВСЕ группы, возможно только получить группы, которыми вы управляете, с помощью разрешения user_managed_groups и конечной точки /me/groups.

24
задан Jader Dias 18 January 2010 в 00:49
поделиться

4 ответа

Это похоже на использование new Process() с именем пользователя и паролем, а сервисный режим «не вычисляет»:)

Цитата из MSDN:

Вы можете изменить параметры, указанные в свойстве StartInfo, до времени, когда вы вызываете метод Start в процессе. После запуска процесса изменение значений StartInfo не влияет и не перезапускает связанный процесс. Если вы вызываете метод Start (ProcessStartInfo) с установленными свойствами ProcessStartInfo .. ::. UserName и ProcessStartInfo .. ::. Password, вызывается неуправляемая функция CreateProcessWithLogonW, которая запускает процесс в новом окне, даже если значение свойства CreateNoWindow Значение true или значение свойства WindowStyle скрыто.

Кроме того, смотрите документацию CreateProcessWithLogonW:

lpStartupInfo [in]

Указатель на структуру STARTUPINFO. Приложение должно добавить разрешение для указанной учетной записи пользователя для указанной оконной станции и рабочего стола, даже для WinSta0 \ Default.

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

В .NET StartupInfo нет lpDesktop, с другой стороны, у пользователя SERVICE нет рабочего стола, что может привести к вашей проблеме.

Короче говоря, попробуйте установить LoadUserProfile в true , чтобы загрузить информацию о пользователе из реестра, или, возможно, вам нужно установить рабочий каталог и т. Д.

Для дальнейшего расследования вам следует проверить свою среду и, возможно, записать, какие файлы доступны с помощью FileMon.

14
ответ дан Guvante 29 November 2019 в 00:16
поделиться

Я бы попытался создать процесс в олицетворенном контексте вновь созданного пользователя, как показано ниже.

[DllImport("advapi32.DLL", SetLastError = true)]
public static extern int LogonUser(string lpszUsername, string lpszDomain, string lpszPassword, int dwLogonType, int dwLogonProvider, out IntPtr phToken);

[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
public extern static bool CloseHandle(IntPtr handle);

[DllImport("advapi32.DLL")]
public static extern bool ImpersonateLoggedOnUser(IntPtr hToken);

static void Main()
{             
    IntPtr admin_token = new IntPtr();
    WindowsIdentity wid_admin = null;
    WindowsImpersonationContext wic = null;

    LogonUser("username", "domain", "password", 9, 3, out admin_token);
    wid_admin = new WindowsIdentity(admin_token);
    wic = wid_admin.Impersonate();

    _process = new Process
    {
        StartInfo =
        {
            Arguments = " -debug",
            FileName = instanceDirectory + "host.exe",
            WorkingDirectory = instanceDirectory,
            UseShellExecute = false,
            RedirectStandardError = true,
            RedirectStandardOutput = true,
            RedirectStandardInput = true,
            UserName = Helpers.GetUserNameForInstance(_hostid),
            Password = _hostpass,
            Domain = ""
        },
        EnableRaisingEvents = true
    };

    if (wic != null) wic.Undo();
    CloseHandle(admin_token);
}
5
ответ дан Sean Kornish 29 November 2019 в 00:16
поделиться

Двойной прыжок между серверами может привести к потере учетных данных службы, возможно, настройка Kerberos решит эту проблему.

http://neverknewthat.wordpress.com/2009/05/14/kerberos/

3
ответ дан Jeremy Thompson 29 November 2019 в 00:16
поделиться

0xC0000142 (-1073741502) - status_dll_init_failed:

Инициализация динамической библиотеки связи [Имя] не удалось. Процесс прекращается ненормально.

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

1
ответ дан 29 November 2019 в 00:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: