Pobieranie praw administratora

0

Witam.

Chcę wykonać operacje dodawania danych do rejestru Windows. Wymaga to podwyższonych uprawnień.
Jak je zdobyć? Pracuję na koncie administratora, więc nie chcę pytań o hasło.
Do operacji na rejestrze wykorzystuję reg jako komendę w runtime.exec("reg add
Myślałem o runas, jednak on wymaga hasła.

Pozdrawiam.

0

Specjalistą od WinAPI nie jestem, ale to, czy nie chcesz pytań o hasło, to już ustawienie Windowsa, więc dopóki nie zmienisz UAC, to nie poradzisz nic.

0

Wydaje mi się, ze musisz odpalić proces Javowy z uprawnieniami admina. Aplikacja nie może w runtime podnieść uprawnień ze względów bezpieczeństwa.

0

Jak robią to inne programy, u których podczas pierwszego uruchomienia wyświetlany jest monit o pobranie praw administratora? np. WinAmp celem dodania nowych rozszerzeń do rejestru.
Właściwie to Runtime uruchamia dopiero program wymagający praw administratora (wiem, że nie należy tego mylić z cmd). Można więc zapytać jak zrobić to z konsoli, w taki sposób aby nie prosił o podane hasła. Uruchamiając program z explorera windows nie jesteśmy pytania o hasło, jeśli robi to użytkownik posiadający prawa administratora. A jak z linią poleceń?

0

Jeżeli uruchamiasz z linii poleceń program, który wymaga UAC to nie zostanie uruchomiony z podwyższonymi uprawnieniami. explorer umie to zrobić - pewnie dlatego, że korzysta z ShellExecuteExA, która oczekuje określonej struktury, w której możesz podać parametr "verb" i jeśli on jest równy "runas", to UAC wejdzie to akcji. Program runas z kolei działa nieco inaczej, nie obsługuje UAC, bo powstał długo przed nim.

Ogólnie: uruchom zewnętrzny program (albo sam siebie) przez ShellExecute w odpowiedni sposób: https://docs.microsoft.com/pl-pl/windows/win32/api/shellapi/ns-shellapi-shellexecuteinfoa

0

Działa mi takie cuś na Windows 10.

    public int run(String command) {
        Runtime runTime = Runtime.getRuntime(); 
        
        try {
            Process process = runTime.exec(command);
            InputStream inputStream = process.getInputStream();
            InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
            BufferedReader bufforReader = new BufferedReader(inputStreamReader);            
            boolean ret = process.waitFor(5,TimeUnit.SECONDS);
            
            System.out.println("Runinng return: "+ret);
            
            String line = null;
            
            while((line = bufforReader.readLine()) != null) {
                System.out.println(">>> "+line);    
            }      
            
            if (ret == true)
                return 0;
            else
                return 1;
        } catch (IOException ex) {
            Logger.getLogger(WinRegTest.class.getName()).log(Level.SEVERE, null, ex);
            return -1;
        } catch (InterruptedException ex) {
            Logger.getLogger(WinRegTest.class.getName()).log(Level.SEVERE, null, ex);
            return -2;
        }
    }

Jako komendę daję shella, który uruchamia innego shella w ukrytym okienku z prawami administratora, czyli takie cuś

powershell Start-Process powershell -windowstyle hidden -verb runas -ArgumentList 'New-Item -Path HKCU:\\Software -Name DUPA -Force'

No a to taki mały skrót skrótu

    public int runPowerShell(String command) {
        return run("powershell Start-Process powershell -windowstyle hidden -verb runas -ArgumentList '"+command+"'");
    }

W miejsce "command" można już używać faktycznie poleceń shella

Mam nadzieję, że się to komuś przyda.

Pozdrawiam

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