Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Programm mit Adminrechten starten:Fail! (https://www.delphipraxis.net/161852-programm-mit-adminrechten-starten-fail.html)

donauwelle 24. Jul 2011 15:06

Programm mit Adminrechten starten:Fail!
 
Servus!
Ich benutze das Tutorial von DJ SPM um meine Delphi-Anwendung mit Admin-Rechten zu starten
(Tut.link: http://www.delphipraxis.net/110066-%...n-starten.html).

Hab alles wie beschrieben durchgeführt allerdings startet das Programm mit den eingestellten Benutzerrechten.

Nach dem Schließen des Programms krieg ich unten im Debugger folgendes geschrieben:
Code:
[DCC Warnung] W1056 Warning: Duplicate resource: Type 10 (RCDATA), ID TFORM1; File D:\Delphi Neu\ACgame\u_acgame.dfm resource kept; file D:\Delphi Neu\ACgame\u_acgame.dfm resource discarded.
[DCC Warnung] W1056 Warning: Duplicate resource: Type 24 (user-defined), ID 1; File D:\Delphi Neu\ACgame\acgame.res resource kept; file D:\Delphi Neu\ACgame\manifest.res resource discarded.
{$R u_acgame.dfm}&{$R manifest.res} hab ich gleich vor uses stehen, gehört es vllt irgendwo anders hin? Was muss ich ändern damit mein Programm als Admin ausgeführt werden kann?

mfg
Donau Welle

himitsu 24. Jul 2011 15:55

AW: Programm mit Adminrechten starten:Fail!
 
Welche Delphiversion nutzt du denn?



Du hast noch ein weiteres Manifest eingebunden ... es kann nur Eines geben.
Genau das besagt auch in der Meldung "Duplicate resource".
Und wenn du den verlinkten Thread durchgelesen hättest, dann wären dir da drüben auch Probleme, wie "Warning: Duplicate resource: Type ..." und deren lösung aufgefallen.

Der Compiler, bzw. der Linker kann nunmal nur jeweils eine "gleichnamige" Resource einbinden und hat darum alle Nachfolgenden übergangen (siehe Warnung) ... heißt also, da zufällig das Admin-Manifest nach dem anderen Manifest stand/compiliert wurde, wurde Deines übergangen.




Was du machen mußt?
genau das was die Warnung besagt: alle doppelten/mehrfachen Resourcen entfernen.

Unit XPMan, Komponente TXPManifest oder in den neueren Delphis in den Projektoptionen aktiviert?
Außerdem versuchst du entweder zwei Units mit TForm1 einzubinden oder bindest deren DFM-Resource mehrmals ein.

Compiler-Infos kann man beachten (sollte sie sich zumindestens mal ansehn).
Warnungen sollte man beachten und möglicht das beheben, was sie besagen.
Fehler / Schwere Fehle muß man sowieso beheben.




Weitere Infos zum Manifest > siehe Hier im Forum suchenManifest Creator und den dort verlinkten Seiten.

PS: Wo {$R ...} deklariert, ist nahezu egal. Es könnte auch mitten im Quellcode oder gar in einer anderen Unit oder auch alles in der DPR drinstehn,
aber vorallem wegen dem Formeditor sollte die Formresource nicht verschoben werden.

donauwelle 24. Jul 2011 16:44

AW: Programm mit Adminrechten starten:Fail!
 
Delphi 2010

Ich muss wohl auch folgendes gestehen :oops:
Zitat:

Zitat von haentschman (Beitrag 762934)
Hallo...

vieleicht sollte ich erst mal wach werden... :oops:

ich habe dümmlicherweise den gleichen Namen benutzt den Delphi als .res für das Projekt anlegt :wall:

Name geändert...alles i.O.

:duck:

allerdings hätt ich noc ne frage:
ich hab bei mir nicht requireadminstrator stehen sondern highestavailable, das problem ist allerdings wenn ich auf "Nein" bei der Meldung klicke dann startet die Anwendung nicht trotz highest available (obwohl es laut dem Tutorial einfach mit den Normalen-Rechten starten müsste)
Woran kann denn das liegen? Mach ich schon wieder etwas falsch?


mfg
DonauWelle

haentschman 24. Jul 2011 16:49

AW: Programm mit Adminrechten starten:Fail!
 
...das ist aber nicht die feine englische Art meine Schandtaten noch zu verbreiten. Der Grashügel war schon einen Meter hoch... 8-)
Tja, sowas passiert wenn man zuviel am Projekt gearbeitet hat und mit den Gedanken schon weiter ist. :zwinker:

donauwelle 24. Jul 2011 16:58

AW: Programm mit Adminrechten starten:Fail!
 
Zitat:

Zitat von haentschman (Beitrag 1113300)
...das ist aber nicht die feine englische Art meine Schandtaten noch zu verbreiten. Der Grashügel war schon einen Meter hoch... 8-)
Tja, sowas passiert wenn man zuviel am Projekt gearbeitet hat und mit den Gedanken schon weiter ist. :zwinker:

Entschuldigung :oops:
eben :lol: ich bin wie du ein vorausdenkender Mensch :lol:

Kannst du mir mit dem "highestAvailable" weiterhelfen?


mfg
DonauWelle

haentschman 24. Jul 2011 17:03

AW: Programm mit Adminrechten starten:Fail!
 
Ich habe nicht richtig verstanden welche Meldung du mit NEIN bestätigst. Wenn du die UAC meinst startet keine Anwendung bei drücken auf NEIN.
PS: über welches OS reden wir ? Vista / Win7 ?

donauwelle 24. Jul 2011 17:28

AW: Programm mit Adminrechten starten:Fail!
 
Zitat:

Zitat von haentschman (Beitrag 1113309)
Ich habe nicht richtig verstanden welche Meldung du mit NEIN bestätigst. Wenn du die UAC meinst startet keine Anwendung bei drücken auf NEIN.
PS: über welches OS reden wir ? Vista / Win7 ?


hmmm :( aber im Tutorial steht doch das:
Zitat:

highestAvailable ist das nächst kleinere Level. Es fragt nach Adminrechten, bekommt es diese nicht, wird das Programm mit den Standard-Userrechten ausgeführt.
Win7

mfg
DonauWelle

jaenicke 24. Jul 2011 18:11

AW: Programm mit Adminrechten starten:Fail!
 
Wenn du das willst, benutze einfach kein Manifest sondern versuche eine zweite Instanz deines Programms mit Adminrechten zu starten, wenn es noch keine hat. Schlägt das fehl, setzt du den Start der non-Admin Instanz fort, war der Start erfolgreich, beendest du sie.

Und grundsätzlich ist die Frage, ob du absolut sicher bist, dass dein gesamtes Projekt Adminrechte benötigt...

DeddyH 24. Jul 2011 18:11

AW: Programm mit Adminrechten starten:Fail!
 
Ich würde einmal bei der Quelle nachsehen.

donauwelle 24. Jul 2011 18:25

AW: Programm mit Adminrechten starten:Fail!
 
Zitat:

Zitat von DeddyH (Beitrag 1113320)
Ich würde einmal bei der Quelle nachsehen.

Hier steht ja ganz was anders :lol:

@jaenicke
Wie meinst du das? Soll ich die Anwendung 2x starten und dann die Möglichkeiten ausschließen?
Ich brauche die Admin-Rechte damit ich die Registrierung reinigen bzw. defragmentieren kann, andere Funktionen wären z.B defekte Verknüpfungen löschen zu können...man könnte es also mit dem CCLeaner vergleichen.

himitsu 24. Jul 2011 18:33

AW: Programm mit Adminrechten starten:Fail!
 
Es kommt drauf an wo genau du was löschen willst und ob dafür nich auch die normalen Rechte ausreichen,
aber wenn du so oder so höhere rechte benötigst, dann kommst'e um requireAdministrator sowieso nicht drumrum.

jaenicke 24. Jul 2011 18:36

AW: Programm mit Adminrechten starten:Fail!
 
Zitat:

Zitat von donauwelle (Beitrag 1113325)
Wie meinst du das? Soll ich die Anwendung 2x starten und dann die Möglichkeiten ausschließen?

Richtig. Wenn dein Programm gestartet wird, prüfst du einfach im Projektquelltext, ob du bereits Adminrechte hast. Wenn ja, setzt du einfach den Start fort.

Wenn nein, versuchst du dein eigenes Programm mit Adminrechten zu starten (z.B. mit ShellExecute und 'runas' als Verb). Ist das erfolgreich, beendest du die non-Admin Instanz. Ist es nicht erfolgreich, kannst du mit der non-Admin Instanz weitermachen.

In deinem Fall liest es sich aber so, dass du auch erst einmal ohne Adminrechte arbeiten könntest und diese nur bei Bedarf anfordern könntest, sobald du sie wirklich brauchst. ;-)

haentschman 24. Jul 2011 18:38

AW: Programm mit Adminrechten starten:Fail!
 
Zitat:

hmmm aber im Tutorial steht doch das:

Zitat:

highestAvailable ist das nächst kleinere Level. Es fragt nach Adminrechten, bekommt es diese nicht, wird das Programm mit den Standard-Userrechten ausgeführt.

... aber nur wenn du auf JA drückst. Bei NEIN wird die Ausführung abgebrochen.

donauwelle 24. Jul 2011 18:44

AW: Programm mit Adminrechten starten:Fail!
 
@jaenicke wenn er keine Adminrechte bekommt, dann könnte er ja trotzdem in die Registry einblicken (Read) aber eben nichts ändern:
Gute Idee hab sogar eine Funktion dazu gefunden:
Code:
function IsNT: boolean;
var OsVersion: TOSVersionInfo;
begin
  OsVersion.dwOSVersionInfoSize := sizeof(OsVersion);
  if( GetVersionEx(OsVersion) = true ) then
    Result := (OsVersion.dwPlatformId = VER_PLATFORM_WIN32_NT);
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  if IsNT = true then
    showmessage('This is Windows NT')
  else
    showmessage('This is NOT Windows NT');
 
end;


Zitat:

... aber nur wenn du auf JA drückst. Bei NEIN wird die Ausführung abgebrochen.
ja leider :cry:

jaenicke 24. Jul 2011 19:00

AW: Programm mit Adminrechten starten:Fail!
 
Zitat:

Zitat von donauwelle (Beitrag 1113332)
@jaenicke wenn er keine Adminrechte bekommt, dann könnte er ja trotzdem in die Registry einblicken (Read) aber eben nichts ändern:

Kommt darauf an wo in der Registry, im benutzerspezifischen Teil geht es auch ohne.

Zitat:

Zitat von donauwelle (Beitrag 1113332)
Gute Idee hab sogar eine Funktion dazu gefunden:

Was hat die mit den Adminrechten zu tun? Du musst prüfen, ob dein Programm Adminrechte hat oder nicht. Die schnelle Lösung ist IsUserAnAdmin, empfohlen werden andere Lösungen (mit denen ich aber bisher keine zuverlässige Lösung hinbekommen habe).


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:32 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz