Programm als Benutzer nicht-Administrator starten?

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
_JON_
Beiträge: 389
Registriert: 30.03.2010 15:24

Programm als Benutzer nicht-Administrator starten?

Beitrag 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?
PureBasic 5.46 LTS (Windows x86/x64) | windows 10 x64 Oktober failure
Benutzeravatar
Thorsten1867
Beiträge: 1360
Registriert: 04.02.2005 15:40
Computerausstattung: [Windows 10 x64] [PB V5.7x]
Wohnort: Kaufbeuren
Kontaktdaten:

Re: AW: Programm als Benutzer nicht-Administrator starten?

Beitrag von Thorsten1867 »

Wenn du dir die Arbeit für das Setup sparen willst, kannst du gerne auch mein EasySetup nutzen. ;-)
Download of PureBasic - Module
Download of PureBasic - Programmes

[Windows 11 x64] [PB V6]

Bild
Benutzeravatar
Josh
Beiträge: 1028
Registriert: 04.08.2009 17:24

Re: Programm als Benutzer nicht-Administrator starten?

Beitrag 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.
Benutzeravatar
_JON_
Beiträge: 389
Registriert: 30.03.2010 15:24

Re: Programm als Benutzer nicht-Administrator starten?

Beitrag 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", "", "")
PureBasic 5.46 LTS (Windows x86/x64) | windows 10 x64 Oktober failure
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Programm als Benutzer nicht-Administrator starten?

Beitrag 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 :mrgreen:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
_JON_
Beiträge: 389
Registriert: 30.03.2010 15:24

Re: Programm als Benutzer nicht-Administrator starten?

Beitrag 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.
PureBasic 5.46 LTS (Windows x86/x64) | windows 10 x64 Oktober failure
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Programm als Benutzer nicht-Administrator starten?

Beitrag von ts-soft »

_JON_ hat geschrieben:Hmm, an so was einfaches habe ich gar nicht gedacht.
Naja, das Alter macht weise :lol:

Bin früher auch meist über ROM von Berlin nach Hamburg gefahren <)
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
purebas
Beiträge: 127
Registriert: 11.03.2008 23:59
Wohnort: München

Re: Programm als Benutzer nicht-Administrator starten?

Beitrag 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.
Benutzeravatar
Thorsten1867
Beiträge: 1360
Registriert: 04.02.2005 15:40
Computerausstattung: [Windows 10 x64] [PB V5.7x]
Wohnort: Kaufbeuren
Kontaktdaten:

Re: AW: Programm als Benutzer nicht-Administrator starten?

Beitrag 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 :-D )
Download of PureBasic - Module
Download of PureBasic - Programmes

[Windows 11 x64] [PB V6]

Bild
Antworten