Impersonation virker ikke - hvorfor???
HejJeg har et problem som jeg håber I kan hjælpe mig med. Jeg er ved at forsøge, at lave et lille tool der kan hjælpe mig og mine kolleger i det daglige når der skal startes og stoppes services på nogle servere.
Jeg bruger følgende klasse til opbevaring af information om den enkelte service:
[Serializable]
public class ManagedService : Notifier
{
private Guid id = Guid.Empty;
private string friendlyName; //Udelukkende til informativt brug
private string description; //Udelukkende tilinformativt brug
private string serverName; //maskinen hvorpå servicen befinder sig
private string serviceName; //Navnet på den service som det drejer sig om
private string domain; //Domænet som brugeren er medlem af, hvis domænebruger
private string runAsUser; //Det brugernavn der skal impersonates
private string userPassword; //det password der skal bruges ved impersonation
private bool localUser; //true hvis der er tale om en lokal bruger
private int timeOut; //Ventetid ifm. Handlingen på servicen.
}
Alt selvfølgelig er encapsulated.
Jeg bruger en serviceController til at få information om og udføre handlinger på den pågældende service. Servicecontrrolleren initierer jeg således:
ServiceController service = new ServiceController(ManagedService.ServiceName, ManagedService.ServerName);
... //Den handling jeg ønsker at foretage.
Ovenstående kode har jeg forsøgt at anvende sammen med forskellige kodestumper jeg har fundet rundt på nettet der alle postulerer at virke som impersonation. Det er ligegyldigt om ovenstående kode er indlejret i et using statement i stil med dette:
using (new Impersonator(user, domain, password))
{
... //ovenstående kode
}
Eller om jeg på anden vis får en Impersonator kørende før jeg kalder koden "underlagt" denne Impersonatorkontekst.
Ligegyldigt hvad jeg gør, så kan jeg ikke få nogen af de kodestumper til at virke som jeg har fundet.
Mine spørgsmål er nu følgende:
1.
Kan jeg fra maskine A, ved brug af en domainuser med admin rettigheder, få adgang til at starte, stoppe osv. Service B på server C, og i givet fald hvordan - meget gerne i form af kodeeksempel/henvisning?
2.
Kan jeg fra maskine A, ved brug af en lokal bruger på server D som har admin rettigheder, få adgang til at starte, stoppe osv. Service E på server D, og i givet fald hvordan - meget gerne i form af kodeeksempel/henvisning?
3.
Eller virker impersonation kun på den maskine hvor min kode afvikles, dvs. på maskine A?