Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > Запуск процесса под другим пользователем


Автор: Андреy 1.12.2008, 10:44
Всем добрый день.
Никак не получается открыть файл под другим пользователем.
GetLastError возвращает код 1326 — unknown user name or bad password.
Но имя пользователя и пароль ВЕРНЫ!
Потому что вот такой код работает:
Код

Dim SInfo As STARTUPINFOW
Dim PInfo As PROCESS_INFORMATION

SInfo.cb = Len(SInfo)
SInfo.lpReserved = 0
SInfo.dwFlags = 0
SInfo.wShowWindow = WindowStyle
    
    If Directory = "" Then
        sDir = CurDir
    Else
        sDir = Directory
    End If
        
Res = CreateProcessWithLogonW(sUsername, sDomain, sPwd, _
                              LOGON_NETCREDENTIALS_ONLY, _
                              "C:\Program Files\Microsoft Office\OFFICE11\excel.exe", _
                              "/r " & Chr(34) & fName & Chr(34) & "", _
                              0&, _
                              ByVal 0&, _
                              StrPtr(sDir), _
                              SInfo, PInfo)


Код выше запускает Excel, но файл открыть не может (пользователь, под которым запущен комп, не имеет к нему доступа, а пользователь sUsername — имеет, поэтому под ним Excel и запускается.)
Вообще нужно использовать параметр LOGON_WITH_PROFILE. Код ниже не работает, и ошибка 1326:
Код

Dim SInfo As STARTUPINFOW
Dim PInfo As PROCESS_INFORMATION

SInfo.cb = Len(SInfo)
SInfo.lpReserved = 0
SInfo.dwFlags = 0
SInfo.wShowWindow = WindowStyle
    
    If Directory = "" Then
        sDir = CurDir
    Else
        sDir = Directory
    End If
        
Res = CreateProcessWithLogonW(sUsername, sDomain, sPwd, _
                              LOGON_WITH_PROFILE, _
                              "C:\Program Files\Microsoft Office\OFFICE11\excel.exe", _
                              "/r " & Chr(34) & fName & Chr(34) & "", _
                              0&, _
                              ByVal 0&, _
                              StrPtr(sDir), _
                              SInfo, PInfo)


Пробую сделать просто вход (LogonUser) — и тоже ошибка 1326.
Код

r = LogonUser(sUsername, sDomain, sPwd, _
              LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, Token)


При этом эксперементировал с параметрами dwLogonType и dwLogonProvider — иногда код ошибки меняется.
LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT — код 1326
LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_WINNT50 — код 1326
LOGON32_LOGON_BATCH, LOGON32_PROVIDER_DEFAULT — код 1909 (the referenced account is currently locked out and may not be logged on to)
LOGON32_LOGON_BATCH, LOGON32_PROVIDER_WINNT50 — код 1326
LOGON32_LOGON_NETWORK, LOGON32_PROVIDER_DEFAULT — код 1326
LOGON32_LOGON_NETWORK , LOGON32_PROVIDER_WINNT50 — код 1909

В чем может быть причина? Пароль и пользователь верны. Работаю под XP — значит жесткое условие на функцию LogonUser отпадает (я про супер-пупер права учетки).

Автор: mihanik 4.12.2008, 21:37
Андреy!!!
Мил человек!!! Тебе нужно в ветку соответствующего языка программирования!!!
А тут скажу "исрользуй команду винды runas"

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)