2008-10-30 12 views
7

Jak określić nazwę użytkownika i hasło, aby program mógł otworzyć plik do czytania? Program, który potrzebuje dostępu do pliku, jest uruchomiony z konta, które nie ma dostępu do odczytu do folderu, w którym znajduje się plik. Program jest napisany w C# i .NET 2, działa pod XP, a plik jest na serwerze Windows 2003 maszyna.Jak przedstawić referencje w celu otwarcia pliku?

Odpowiedz

0

Możesz podszyć się pod użytkownika, który ma niezbędne prawa. Jest article on MSDN, który opisuje, jak to zrobić.

12

Chcesz podszyć się pod użytkownika, który ma prawa dostępu do pliku.

Polecam używanie takiej klasy - http://www.codeproject.com/KB/cs/zetaimpersonator.aspx. Ukrywa całą paskudną realizację podszywania się pod kogoś.

using (new Impersonator("myUsername", "myDomainname", "myPassword")) 
{ 
    string fileText = File.ReadAllText("c:\test.txt"); 
    Console.WriteLine(fileText); 
} 
+0

Działa to świetnie. Zauważyłem, że ścieżki do plików muszą być w formacie UNC, jeśli znajdują się na innym komputerze. –

+1

Działa również dla mnie, zabrało mi trochę czasu, aby to zadziałało, ponieważ pominąłem uwagę zamieszczoną na odnośnej stronie: _Uwaga: Kontekst użytkownika inicjujący podszywanie się (tj. Nie kontekst użytkownika, do którego jest przełączany) musi mieć ustawę "Ustaw jako część systemu operacyjnego". –

+0

Szkoda, że ​​autor codeproject nigdy nie przeniósł go do Nuget. Komentarz mojej odpowiedzi był przeznaczony tylko dla zabawy; ponieważ zrozumiałeś, że odpowiedziałeś to 8 lat temu przed Nuget. – OmegaMan

5

Korzystałem z pakietu Nuget NuGet Gallery | Simple Impersonation Library 1.1.0, ale są też inne; wyszukaj podszywanie się pod inne osoby.

Przykład użycia z wykorzystaniem interaktywnego logowanie do pracy ze strukturami plików:

using (Impersonation.LogonUser("{domain}", 
           "{UserName}", 
           "{Password}", 
           LogonType.Interactive)) 
{ 
    var directory = @"\\MyCorpServer.net\alpha\cars"; 

    Assert.IsTrue(Directory.Exists(directory)); 
} 

Jamesa odpowiedź poniżej było przed Nuget i zanim on by później mieć najbardziej pobrany pakiet na Nuget. Ironiczny eh?

+0

Proste, wielkie dzięki! –