2008-09-15 10 views
0

Ich muss Windows-Dienst remote auf Anzahl der Computer installieren, damit ich CreateService() und andere Service-Funktionen von WinAPI verwenden. Ich kenne das Administratorkennwort und den Benutzernamen für Computer, auf die ich zugreifen muss. Um den Zugriff auf entfernte Computer zu verschaffen ich IMPERSONATE Prozesses mit Hilfe von Logonuser wie dieser Aufruf:Remote-Installation von Windows-Dienst

//all variables are initialized correctly 
int status = 0;   
status = LogonUser(lpwUsername,   
       lpwDomain,   
        lpwPassword,   
        LOGON32_LOGON_NEW_CREDENTIALS,  
        LOGON32_PROVIDER_DEFAULT, 
        &hToken);    


if (status == 0)  
{ 
     //here comes a error 
} 

status = ImpersonateLoggedOnUser(hToken);  
if (status == 0)     
{  
    //once again a error  
}  

//ok, now we are impersonated, do all service work there 

So erhalte ich Zugang zu Maschine in einer Domäne, aber einige von Computern sind aus Domäne. Auf Computern außerhalb der Domäne funktioniert dieser Code nicht. Gibt es eine Möglichkeit, den Dienstmanager auf der Maschine außerhalb der Domäne aufzurufen?

Antwort

2

Sie es tun können, muss das Konto auf dem entfernten Rechner existieren, und Sie müssen die Computernamen für die Domänennamen in den Logonuser Aufruf verwenden.

0

Anstatt eigene zu rollen, warum nicht einfach den integrierten SC-Befehl verwenden?

0

OK, Problem gelöst (nicht wirklich sehr gut, aber eher OK). Ich habe WNetAddConnection() zu IPC $ auf Remote-Computer verwendet.