Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Jak w programie sprawdzić, z jakimi uprawnieniami został uruchomiony program (c++)

Ostatnio zmodyfikowano 2012-07-21 23:14
Autor Wiadomość
cyklopek11
Temat założony przez niniejszego użytkownika
Jak w programie sprawdzić, z jakimi uprawnieniami został uruchomiony program (c++)
» 2012-07-09 12:17:29

Pisze program w c++ który między innymi będzie kopiował jakieś tam pliki na partycje systemową (c:  ) ale bez uruchomienia jako administrator Windows Vista czy 7 nie pozwala na to (trzeba prawy klik -> uruchom jako administrator).
I w związku z tym pytanie jak w programie sprawdzić, z jakimi uprawnieniami został uruchomiony program (tzn. czy ktoś uruchomił program przez dwuklik czy też prawy, uruchom jako administrator). Potrzebuje to sprawdzić, aby poinformować użytkownika, że do pełnego działania musi uruchomić program jako administrator.
Szukam na Google, ale nie bardzo wiem jak zaczepić o ten temat …
P-59732
jankowalski25
» 2012-07-09 13:37:12
P-59735
DejaVu
» 2012-07-09 15:25:43
Raczej marny użytek z tego będzie w C++.
P-59741
yoogi
» 2012-07-09 20:14:04
Może spróbuj skopiować plik do folderu systemowego, jeżeli się uda to masz adma :)
P-59757
m4tx
» 2012-07-09 20:34:28
P-59759
akcza
» 2012-07-09 20:37:26
http://stackoverflow.com/questions/6418791/requesting-administrator-privileges-at-run-time\
Z tego co zrozumiałem, żeby uruchomić plik z podwyższonymi prawami, możesz użyć
C/C++
ShellExecute( NULL,
"runas",
"program.exe",
NULL,
NULL, // default dir
SW_SHOWNORMAL
);
Tylko trzeba by zrobić aplikację, która włączy twój docelowy program. Możesz np. zrobić to wykorzystując zasoby.
P-59760
cyklopek11
Temat założony przez niniejszego użytkownika
» 2012-07-21 23:14:24
Wracając do tematu moje wymagania doskonale spełniła funkcja IsUserAnAdmin() z biblioteki shell32.dll. Zamieszczam prosty kod dla osób które potrzebują takiej funkcjonalności (oczywiście można dalej bawić się zmieniając statyczne odwołanie do C:/WINDOWS/system32/shell32.dll ):

C/C++
#include <iostream>
#include <windows.h>


using namespace std;

int main()
{
    BOOL isAdministrator = false;
    HMODULE hModule = LoadLibrary( "C:/WINDOWS/system32/shell32.dll" );
    typedef BOOL( * PIsUserAnAdmin )();
    PIsUserAnAdmin pointer = reinterpret_cast < PIsUserAnAdmin >( GetProcAddress( hModule, "IsUserAnAdmin" ) );
   
    if( pointer != NULL )
    {
        isAdministrator = pointer();
    }
   
    cout << boolalpha << static_cast < bool >( isAdministrator ) << endl;
    cin.get();
    return 0;
}
P-60813
« 1 »
  Strona 1 z 1