Uruchamianie procesu jako użytkownik z poziomu usługi

szukaj na forum nowy temat odpowiedz

Strona [ 1 2 >> ] z 2

arturo_201 ten post 10-03-2010 11:45


Użytkownik
Status: Offline
Dołączył: 24-03-2008

Witam. Chcę z poziomu usługi systemowej uruchomić proces jako zwykły użyszkodnik. Próbuję robić to tak:
Process proces = new Process();
proces.StartInfo.FileName = Application.StartupPath + "\\mojprogram.exe";
proces.StartInfo.UserName = "nazwauzytkownia";
proces.StartInfo.UseShellExecute = false;
proces.Start();


ale niestety wywala wyjątek "odmowa dostępu" :( Wujek google też niezbyt wiele mi powiedział na ten temat. Wie ktoś jak to zrobić inaczej? Z góry dziękuję za pomoc, pozdrawiam.
Przejdź na górę strony
cytuj
MSM ten post 10-03-2010 11:51
avatar

Użytkownik
Status: Offline
Dołączył: 24-04-2009
Skąd: Google Search
A twoja aplikacja / konto ma uprawnienia do tego? :]
#define private public   // beware classes, I`m coming!
:D
Przejdź na górę strony
cytuj
arturo_201 ten post 10-03-2010 12:15


Użytkownik
Status: Offline
Dołączył: 24-03-2008

Ustawiam hasło dla danego konta
SecureString password = new SecureString();
... // ustawiam haslo
proces.StartInfo.Password = password;

i tak jest lipa :(
O jakie uprawnienia konkretnie Ci chodziło??

Ostatnio zmodyfikowany: 10-03-2010 12:16 przez arturo_201
Przejdź na górę strony
cytuj
MSM ten post 10-03-2010 16:33
avatar

Użytkownik
Status: Offline
Dołączył: 24-04-2009
Skąd: Google Search
Możliwe że:

1. Konto (na komputerze, np. 'użyszkodnik1' czy 'rafał') może mieć zablokowany przez admina dostęp do tego. A przynajmniej wydaje mi się że może bo nigdy nie próbowałem blokować na swojej machinie :]

2. Projekt -> menu "Project" -> [nazwa projektu] Properties -> Security -> możliwe że masz tam coś odznaczone (wątpie :/).

I jeszcze jedno: Gdzie ci to rzuca? MSDN podaje że ani konstruktor, ani Start() Nie wywalają żadnego wyjątku typu "odmowa dostępu" (bo można by kombinować)...
#define private public   // beware classes, I`m coming!
:D

Ostatnio zmodyfikowany: 10-03-2010 16:34 przez MSM
Przejdź na górę strony
cytuj
arturo_201 ten post 11-03-2010 20:50


Użytkownik
Status: Offline
Dołączył: 24-03-2008

Nie mam pojęcia gdzie tkwi problem, dam sobie z tym spokój. Mam teraz inne pytanie, żeby nie zakładać nowego tematu, spytam tutaj: w jaki sposób usługa systemowa może uzyskać dostęp do pulpitu? (a konkretnie chcę zrobić screenshot)
Przejdź na górę strony
cytuj
dark_astray ten post 11-03-2010 21:11
avatar

Użytkownik
Status: Offline
Dołączył: 16-12-2009

tzn Chcesz symulować wcisniecie klawisza PrintScreen wrzucając to do schowka czy gdzie tam? Czy poprostu zdobyć zrzut ekranu?

Z tym drugim problemu nie powinno być. Korzystasz z klasy Graphics

            pictureBox1.Image = new Bitmap(400,400);
            Graphics graphics_obj = Graphics.FromImage(pictureBox1.Image);
            graphics_obj.CopyFromScreen(0, 0, 0, 0, new Size(300, 300), CopyPixelOperation.SourceCopy);

www.heller-consult.pl/

www.youtube.com/user/michal1988xx
Przejdź na górę strony
cytuj
arturo_201 ten post 11-03-2010 21:18


Użytkownik
Status: Offline
Dołączył: 24-03-2008

dark_astray napisał:
Korzystasz z klasy Graphics


I dostajesz wyjątek "Nieprawidłowe dojście" :P

Z usługą systemową nie jest tak prosto jak w przypadku zwykłego procesu.
Znalazłem w googlach coś takiego jak "Allow service to interact with Desktop" ale to niestety nie działa na Win Vista (na 7 raczej też nie)... Więc szukam innego rozwiązania. Any ideas??  [???]
Przejdź na górę strony
cytuj
dark_astray ten post 11-03-2010 21:38
avatar

Użytkownik
Status: Offline
Dołączył: 16-12-2009

Wybacz, dotarło do mojej głowy tylko "chce zrobić screenshot" :D
www.heller-consult.pl/

www.youtube.com/user/michal1988xx
Przejdź na górę strony
cytuj
MSM ten post 11-03-2010 21:39
avatar

Użytkownik
Status: Offline
Dołączył: 24-04-2009
Skąd: Google Search
BitBlt. Ale 1) - to funkcja z GDI, 2) - swojego czasu się namęczyłem z implementacją tego, 3) kopiuje tylko z okna, czyli musisz mieć handle.

Może spróbuj jednak zasymulować naciśnięcie printscreen (winapi)?


EDIT:

Na przyszłość polecam Google. Zajęło mi to jakieś 0.5 minuty licząc z wpisywaniem.
http://www.codeproject.com/KB/graphics/cscapturescreen1.aspx

I nie byłoby prościej gdybyś sam to zrobił...?
#define private public   // beware classes, I`m coming!
:D

Ostatnio zmodyfikowany: 11-03-2010 21:45 przez MSM
Przejdź na górę strony
cytuj
johny_bravo ten post 11-03-2010 21:47
avatar

Użytkownik
Status: Offline
Dołączył: 18-02-2006
Skąd: Kraków
Nie zrozumieliscie chyba - podaliscie przyklady robienia screena. Ale co po screenie z uslugi, skoro ma wlasny pulpit? Ja jestem ciekaw po co autorowi taka funkcjonalnosc. W 7 interakcja uslugi z pulpitem jest chyba zabroniona (o ile pamietam - nie da sie), a na pewno co najmniej niemile widziana.

Co do glownego pytania: WindowsIdentity.Impersonate() powinno Cie 'przelogowac' na innego uzytkownika.
You need to learn how to walk
before you can run

Ostatnio zmodyfikowany: 11-03-2010 21:48 przez johny_bravo
Przejdź na górę strony
cytuj
szukaj na forum nowy temat odpowiedz

Strona [ 1 2 >> ] z 2

1 użytkownik(ów) przegląda ten temat (1 gości)
(żadnych zarejestrowanych użytkowników)

Copyright © 2000-2006 by Coyote Group 0.9.3-pre3
Czas generowania strony: 0.0469 sek. (zapytań SQL: 9)