Uprawnienia admina podczas działania programu

0

Mam problem z uprawnieniami administratora. Chcę aby podczas załączania się aplikacji program sprawdzał czy w folderze TEST znajduje się plik, jeśli go nie będzie to chcę aby program go skopiował. Jednak dostęp do folderu TEST ma wyłącznie administrator. Teraz pytanie - da się wymusić aby podczas pracy na koncie z ograniczeniami wykonać operację kopiowania do katalogu TEST?

0

Nie ma żadnego "obejścia". Albo musisz wykonać to co chcesz z poziomu administratora albo przyznać dostęp do katalogu użytkownikowi uruchamiającego aplikację.

0

Szkoda... Wiem, że można uruchomić proces jako inny użytkownik:

            ProcessStartInfo info = new ProcessStartInfo("notepad");
            info.UseShellExecute = false;
            string user = "a";
            string pass = "bcd123";

            SecureString str = new SecureString();

            char[] chArray = pass.ToCharArray();

            foreach (char ch in chArray)
            {
                str.AppendChar(ch);
            }

            Process process = new Process();

            try
            {
                process.StartInfo = info;
                process.StartInfo.UserName = user;
                process.StartInfo.Password = str;

                process.Start();
            }
            catch()
            {
            }

to i myślałem, że można wykonać inne operacje :/

0

te "inne" operacje możesz tylko z poziomu procesu uruchomionego z uprawnieniami administratora, czy to przez runas, czy przez wkompilowany do pliku manifest z ustawionym requestedExecutionLevel=requireAdministrator. na tym poziomie nie ma innej możliwości.

0

Można. To, co przedstawiłeś to uruchomienie danego programu z prawami innego użytkownika, czyli to co napisałem. Można również zalogować się na innego użytkownika "na chwilę", w ramach jednego programu i nazywa się to "impersonation". Jeżeli jednak potrzebujesz jeszcze pokonać UAC to cały proces trzeba uruchomić na prawach administratora. Możesz użyć nawet swojego procesu, uruchomić go ze specjalnym argumentem, wykonać to co trzeba i zwrócić wynik operacji.

0

właśnie o UAC mowa była. to, że uruchomisz program jako inny użytkownik, nie ma żadnego oznaczenia, bo UAC powoduje, że program zostanie uruchomiony z niskimi uprawnieniami (nie pamiętam, czy asInvoker czy jakimiś innymi). proces uruchomiony z pewnym poziomem uprawnień nie może ich zmienić przez cały czas swojego działania.

tak się wymądrzam, bo kilka dni temu w pracy miałem z tym problem i trochę poczytałem.

0

@Rev: "impersonation" to jest chyba to czego potrzebuję. Uzyskać prawa admina do wykonania jednej czy dwóch operacji. Chodzi po prostu o obsługę programu. Aby było jak najmniej klikania dla użytkownika w uprawnienia etc. podczas uruchamiania programu.

0

nie chodzi mi o otwarcie programu jako użytkownik ale tylko o wykonanie czynności jako administrator - tutaj kopiowanie pliku, jeśli ten nie istnieje.

0

ze względu na UAC uruchomienie programu jako administrator (użytkownik mający uprawnienia administratora; tu akurat zbieżność nazw z poleceniem "uruchom jako administrator", powinno być "uruchom z uprawnieniami administratora") i z faktycznymi uprawnieniami administratora to dwie różne rzeczy.
zapewne chodzi Ci o to drugie. i tu moja odpowiedź - ze względu na UAC da się tylko dla całego procesu.

jeśli nie rozumiesz odpowiedzi polecam lekturę MSDN w temacie UAC.

0

Nie, program nie potrzebuje praw administratora. On się po prostu uruchamia. Chodzi o taką kombinację:

/*
 * jakiś wykonywany kod programu
 */

[ADMINMODE_ON]
Directory.CreateDirectory("C:\TEST");
File.Copy( (...) );
[ADMINMODE_OFF]

/*
 * dalszy kod
 */
0

Nie, program nie potrzebuje praw administratora.

Jeżeli zasób, do którego chcesz się dobrać poprzez użytkownika, który ma do niego dostęp co najwyżej poprzez uprawnienia dla grupy Administratorzy to znaczy, że takie działanie zablokuje UAC i poprzez impersonację nie da się tego zrobić. Trzeba uruchomić cały proces z odpowiednim manifestem, zgodnie z UAC.

1 użytkowników online, w tym zalogowanych: 0, gości: 1