Administratorrechte nach Programmstart anfordern
spacer
Autor Nachricht
Nano-Ware
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic starofftopic star
Beiträge: 356
Erhaltene Danke: 7



BeitragVerfasst: Do 20.10.11 23:17 
Hey,

ich schreibe derzeit ein Programm, dass generell ohne Adminrechte läuft, aber bei bestimmter Benutzereingabe, soll der Benutzer per UAC gefragt werden ob mein Programm Adminrechte bekommen darf. Ich weis, dass es nicht möglich ist, nachträglich für eine Anwendung diese Rechte einzufordern, daher suche ich Alternative, um das Problem trotzdem zu lösen. Eine zweite Anwendung möchte ich nicht mitliefern. Habt ihr eventuell Ideen?

Danke!
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.


Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 15833
Erhaltene Danke: 737

XP, W7 x64 (Chrome, IE9, FF), Debian, (OSX 10.7)
RAD XE 2, Java (NB), C++, C# (VS 2010), JS/HTML, PHP, Lazarus
BeitragVerfasst: Fr 21.10.11 06:04 
Ich starte dafür einfach die eigene Anwendung mit entsprechenden Parametern erneut. Um nicht jede Einzelaktion bestätigen zu müssen, lasse ich manchmal die zweite Anwendung auch offen und gebe per IPC weitere Befehle weiter. Zum Beispiel in diesem Quelltext:
www.delphi-forum.de/...?t=94339&start=0

Eine etwas kompliziertere Variante wäre ein out-of-process COM Server. Aber auch dafür gibt es einiges im Netz:
www.sourcecodeonline...ess_made_simple.html
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 979
Erhaltene Danke: 124

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Fr 21.10.11 06:09 
ich hatte diesen Code vor einiger Zeit im Netz gefunden .....

ausblenden volle Höhe Delphi-Quelltext markieren
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
procedure ExecuteNewInstance(AExplicitAdmin, AWait: Boolean; AWindow: THandle;
AParams: string);
type
TIsUserAnAdminFunc = function (): BOOL; stdcall;
var
Shell32DLL: THandle;
IsUserAnAdminFunc: TIsUserAnAdminFunc;
AlreadyAdmin: Boolean;
ExecuteInfo: SHELLEXECUTEINFO;
begin
ExecuteInfo.cbSize := sizeof(SHELLEXECUTEINFO);
ExecuteInfo.Wnd := AWindow;
ExecuteInfo.fMask := SEE_MASK_NOCLOSEPROCESS;
AlreadyAdmin := False;
Shell32DLL := LoadLibrary('shell32.dll');
try
if Shell32DLL <> 0 then
begin
@IsUserAnAdminFunc := GetProcAddress(Shell32DLL, 'IsUserAnAdmin');
if Assigned(@IsUserAnAdminFunc) then
AlreadyAdmin := IsUserAnAdminFunc();
end;
finally
FreeLibrary(Shell32DLL);
end;
if AExplicitAdmin and not AlreadyAdmin then
ExecuteInfo.lpVerb := 'runas'
else
ExecuteInfo.lpVerb := 'open';

ExecuteInfo.lpFile := PChar(ParamStr(0));
ExecuteInfo.lpParameters := PChar(AParams);
ExecuteInfo.lpDirectory := PChar(ExtractFilePath(ParamStr(0)));
ExecuteInfo.nShow := SW_SHOWNORMAL;

if ShellExecuteEx(@ExecuteInfo) then
try
if AWait then
WaitForSingleObject(ExecuteInfo.hProcess, INFINITE);
finally
CloseHandle(ExecuteInfo.hProcess);
end;
end;

_________________
Das Problem liegt üblicherweise zwischen den Ohren
DRY DRY KISS
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Luckie
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic starofftopic star
Beiträge: 11803
Erhaltene Danke: 146

WindowsXP Professional SP2
BDS2006, VS C++ Express, Eclipse (Java), Flex (Flash, AS)
BeitragVerfasst: Fr 21.10.11 10:12 

_________________
Gruß Michael
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
home home