Uruchamianie procesu jako użytkownik z poziomu usługi
| arturo_201 |
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.
|
|
|
| MSM |
10-03-2010 11:51 |
|
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!
|
|
|
| arturo_201 |
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 |
|
|
| MSM |
10-03-2010 16:33 |
|
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! ![]() Ostatnio zmodyfikowany: 10-03-2010 16:34 przez MSM |
|
|
| arturo_201 |
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) |
|
|
| dark_astray |
11-03-2010 21:11 |
|
Użytkownik Status: Offline Dołączył: 16-12-2009 |
tzn Chcesz symulować wcisniecie klawisza PrintScreen wrzucając to do schowka czy gdzie tam? Czy 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 |
|
|
| arturo_201 |
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" ![]() 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??
|
|
|
| dark_astray |
11-03-2010 21:38 |
|
Użytkownik Status: Offline Dołączył: 16-12-2009 |
Wybacz, dotarło do mojej głowy tylko "chce zrobić screenshot" ![]() www.heller-consult.pl/ www.youtube.com/user/michal1988xx |
|
|
| MSM |
11-03-2010 21:39 |
|
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! ![]() Ostatnio zmodyfikowany: 11-03-2010 21:45 przez MSM |
|
|
| johny_bravo |
11-03-2010 21:47 |
|
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 |
|
|
|
|
|
| 1 użytkownik(ów) przegląda ten temat (1 gości) |
|---|
| (żadnych zarejestrowanych użytkowników) |





Wujek google też niezbyt wiele mi powiedział na ten temat. Wie ktoś jak to zrobić inaczej? Z góry dziękuję za pomoc, pozdrawiam.





![:]](http://4programmers.net/templates/NewAge/imageset/gfx/smilies/squared.gif)
).