Seite 1 von 1
Programm als Benutzer nicht-Administrator starten?
Verfasst: 16.04.2013 12:49
von _JON_
Hallo Leute,
mein Programm bekommt ein hübsches Setup, welches am Ende eine Option anbietet um das Programm zu starten.
Das Setup läuft natürlich mit Administratorrechten, aber das Programm sollte nur mit Standardrechten starten.
Hat jemand so was schon probiert?
Re: AW: Programm als Benutzer nicht-Administrator starten?
Verfasst: 16.04.2013 13:10
von Thorsten1867
Wenn du dir die Arbeit für das Setup sparen willst, kannst du gerne auch mein EasySetup nutzen.

Re: Programm als Benutzer nicht-Administrator starten?
Verfasst: 16.04.2013 13:29
von Josh
_JON_ hat geschrieben:Das Setup läuft natürlich mit Administratorrechten, aber das Programm sollte nur mit Standardrechten starten.
Ist zwar genau das umgekehrte, aber schau mal
hier. Vielleicht hilft es dir weiter.
@Thorsten1867:
Dein Link funktioniert nicht.
Re: Programm als Benutzer nicht-Administrator starten?
Verfasst: 16.04.2013 14:59
von _JON_
@Thorsten
EasySetup sieht gut aus, vielleicht spar ich mir ein eigenes Setup-programm zu erstellen.
Habe nun schon eine Lösung gefunden:
Code: Alles auswählen
Import "advapi32.lib"
CompilerIf #PB_Compiler_Processor = #PB_Processor_x86
CreateProcessWithToken_(hToken.i, dwLogonFlags.l, lpApplicationName.i, lpCommandLine.i, dwCreationFlags.l, lpEnvironment.i, lpCurrentDirectory.i, lpStartupInfo.i, lpProcessInfo.i) As "_CreateProcessWithTokenW@36"
CompilerElse
CreateProcessWithToken_(hToken.i, dwLogonFlags.l, lpApplicationName.i, lpCommandLine.i, dwCreationFlags.l, lpEnvironment.i, lpCurrentDirectory.i, lpStartupInfo.i, lpProcessInfo.i) As "CreateProcessWithTokenW"
CompilerEndIf
EndImport
Procedure RunWithPidToken(lPid.l, sPath.s, sParameter.s = "", sWorkingDir.s = "")
Protected StartupInfo.StartupInfo
StartupInfo\cb = SizeOf(StartupInfo)
StartupInfo\dwFlags = #STARTF_USESHOWWINDOW
StartupInfo\wShowWindow = #SW_NORMAL
Protected sPara.s, sWork.s
If sParameter <> ""
sPara = sParameter
EndIf
If sWorkingDir <> ""
sWork = sWorkingDir
EndIf
Protected PROCESS_INFORMATION.PROCESS_INFORMATION
Protected hProcess = OpenProcess_(#PROCESS_QUERY_INFORMATION, 0, lPid), hToken, hnewToken
If hProcess
OpenProcessToken_(hProcess, #TOKEN_DUPLICATE, @hToken)
DuplicateTokenEx_(hToken, #TOKEN_ALL_ACCESS, 0, 2, 1, @hnewToken)
CreateProcessWithToken_(hnewToken, 0, @sPath, @sPara, 0, 0, @sWork, StartupInfo, PROCESS_INFORMATION)
CloseHandle_(hnewToken)
CloseHandle_(hToken)
CloseHandle_(hProcess)
EndIf
EndProcedure
Procedure GetPID(ProcessName.s)
hSnapShot = CreateToolhelp32Snapshot_(#TH32CS_SNAPPROCESS,#Null)
If hSnapShot
iResult = -1
pInfo.PROCESSENTRY32
pInfo\dwsize = SizeOf(PROCESSENTRY32)
bProcAvailable = Process32First_(hSnapShot, @pInfo)
While(bProcAvailable) And (Not iResult = 0)
bProcAvailable = Process32Next_(hSnapShot, @pInfo)
iResult = CompareMemoryString(@pInfo\szExeFile,@ProcessName,1)
Wend
CloseHandle_(hSnapShot)
ProcedureReturn pInfo\th32ProcessID
EndIf
EndProcedure
RunWithPidToken(GetPID("explorer.exe"), "cmd.exe", "", "")
Re: Programm als Benutzer nicht-Administrator starten?
Verfasst: 16.04.2013 16:55
von ts-soft
Der einfache und meist übliche Weg ist:
Ein Programm mit Userrechten starten, dies entpackt nur die Dateien (meist nach temp), überprüft den freien Platz usw.
Danach das eigentlich Setup mit "runas" starten und warten, bis dies beendet ist, dann die installierte
Applikation starten.
Ansonsten: Ein eigenes Setup-Programm selber zu schreiben ist schwachfug! Bis man da alles richtig macht,
vergehen Wochen/Monate. Dann lieber eins der vielen schon verfügbaren Setupprogramme nutzen, die schon länger
getested wurden. Es ist jedenfalls eine Menge an Hintergrundwissen und Erfahrung nötig, um selbst das
einfachste Setup in vernünftiger Form selber zu erstellen. Solange man kein Setup-Programm an sich erstellen
möchte, sondern nur für einmalige Nutzung im eigenem Programm, sollte man das Rad nicht neu erfinden, zu
mal die Gefahr gross ist, das dieses neue Rad erstmal eiert

Re: Programm als Benutzer nicht-Administrator starten?
Verfasst: 16.04.2013 19:03
von _JON_
ts-soft hat geschrieben:Der einfache und meist übliche Weg ist:
Ein Programm mit Userrechten starten, dies entpackt nur die Dateien (meist nach temp), überprüft den freien Platz usw.
Danach das eigentlich Setup mit "runas" starten und warten, bis dies beendet ist, dann die installierte
Applikation starten.
Hmm, an so was einfaches habe ich gar nicht gedacht.
Nu gut mein Code ist trotzdem noch nützlich, z.B. um eine Webbrowser aus einem elevated Prozess zu starten.
Re: Programm als Benutzer nicht-Administrator starten?
Verfasst: 16.04.2013 19:19
von ts-soft
_JON_ hat geschrieben:Hmm, an so was einfaches habe ich gar nicht gedacht.
Naja, das Alter macht weise
Bin früher auch meist über ROM von Berlin nach Hamburg gefahren

Re: Programm als Benutzer nicht-Administrator starten?
Verfasst: 17.04.2013 03:39
von purebas
Kann EasySetup als Ersatz für eine Autostart-Verknüpfung oder dem Eintrag im Run-Schlüssel der Registry
eine Aufgabe bei Benutzeranmeldung anlegen?
Ich habe nämlich bemerkt, dass unter Windows8 die alten Startmöglichkeiten mit einer spürbaren Verzögerung
im Vergleich mit einer Startaufgabe durchgeführt werden.
Re: AW: Programm als Benutzer nicht-Administrator starten?
Verfasst: 19.04.2013 16:20
von Thorsten1867
Alles, was "Easy" übersteigt' findet man bei EasySetup bei den benutzerdefinierten Aufgaben.
Es ist also auch möglich Registry-Einträge oder Verknüpfungen im Autostart-Ordner zu erstellen.
ts-soft hat recht, ein Setup-Programmen zu schreiben, ist ein Projekt von vielen Monaten. Hätte ich das damals schon gewusst, was damit auf mich zukommt, hätte ich es mir vielleicht nochmal überlegt.

(Ja, damals war ich halt noch jung und naiv und mich hat niemand gewarnt

)