Programm - nur eine Instanz erlauben
Re: Programm - nur eine Instanz erlauben
OK,
ich hoffe ja mal, dass man das abschalten kann, bzw - bei gemeinsamen Aufrufs aus einem Netzlaufwerk dies nur einmalig ist.
ich hoffe ja mal, dass man das abschalten kann, bzw - bei gemeinsamen Aufrufs aus einem Netzlaufwerk dies nur einmalig ist.
Re: Programm - nur eine Instanz erlauben
Kaeru Gaman hat geschrieben:hä? wieso zweite exe?
das kommt einfach an den Anfang deines Programms rein, als abfrage, damit dein programm weiß dass es schon läuft.
Wir haben einige externe Programme, die man mehrfach starten kann.
Dies möchte ich verhindern, indem ich dort ein Programm vorschalte -> so in etwa:
check_programm.exe K:\soft\externes_programm.exe
Beim ersten Aufruf soll einfach nur das Programm "externes_programm.exe" starten - beim zweiten Aufruf soll eine Meldung kommen "Nur eine Instanz ist erlaubt".
Das wäre so einfacher, da ich hier nur ein Programm "check_programm.exe" für mehrere Aufrufe nutzen kann.
Re: Programm - nur eine Instanz erlauben
Zu den Programmen von Sysinternals.
Das mit der Zustimmung zur EULA hatte mich auch gestört, deshalb habe ich mir vor einiger Zeit schon eine kleine Routine geschrieben:
Die Funktion habe ich bisher nur auf Windows XP Betriebssystemen getestet!
Für das Tool PsExec funktioniert das einwandfrei! Für andere Tools habe ich das ebenfalls noch nicht getestet. Ich habe mir jedoch den Registry-Eintrag von PsList angesehen und es sollte auch mit CheckSysinternalsEula( "PsList" ) funktionieren!
Vielleicht hilft das ja dem ein oder anderen!?
cu, helpy
Das mit der Zustimmung zur EULA hatte mich auch gestört, deshalb habe ich mir vor einiger Zeit schon eine kleine Routine geschrieben:
Code: Alles auswählen
EnableExplicit
; ----------------------------------------------------------------------
; Funktion: CheckSysinternalsEula( ProgramName )
; ----------------------------------------------------------------------
; Diese Funktion überprüft, ob für das Sysinternals Tool ProgramName
; bereits der Eula zugestimmt wurde und setzt die Zustimmung gegebenen-
; falls auf OK.
; Damit kann bei der Verwendung von Sysinternals Tools verhindert werden,
; dass beim ersten Ausführen des Programms, die Abfrage erscheint.
; ----------------------------------------------------------------------
; Ergebnis: #True ..... Eula wurde durch den Anwender bzw. durch diese
; Funktion akzeptiert.
; #False .... Registry konnte nicht gelesen/gesetzt werden.
; ----------------------------------------------------------------------
Procedure CheckSysinternalsEula( ProgramName.s )
Protected dwEulaAccepted.l = -1
Protected DataSize.l = SizeOf( dwEulaAccepted )
Protected hkResult.i
Protected NewKey, KeyInfo
Protected bEulaIsSet = #False
Protected RegSubKey_SysInternals.s, RegEntry_Eula.s
RegSubKey_SysInternals = "Software\Sysinternals\"
RegEntry_Eula = "EulaAccepted"
dwEulaAccepted = -1
DataSize = SizeOf( dwEulaAccepted )
bEulaIsSet = #False
If RegOpenKeyEx_( #HKEY_CURRENT_USER, RegSubKey_SysInternals + ProgramName, 0, #KEY_READ, @hkResult ) = #ERROR_SUCCESS
If RegQueryValueEx_( hkResult, RegEntry_Eula, 0, 0, @dwEulaAccepted, @DataSize) <> #ERROR_SUCCESS
dwEulaAccepted = -1
EndIf
RegCloseKey_( hkResult )
EndIf
If dwEulaAccepted <> 1
dwEulaAccepted = 1
If RegCreateKeyEx_( #HKEY_CURRENT_USER, RegSubKey_SysInternals + ProgramName, 0, 0, #REG_OPTION_NON_VOLATILE, #KEY_ALL_ACCESS, 0, @NewKey, @KeyInfo) = #ERROR_SUCCESS
If RegSetValueEx_( NewKey, RegEntry_Eula, 0, #REG_DWORD, @dwEulaAccepted, SizeOf( dwEulaAccepted ) ) = #ERROR_SUCCESS
bEulaIsSet = #True
EndIf
RegCloseKey_( NewKey )
EndIf
Else
bEulaIsSet = #True
EndIf
;Debug "Checked EulaAccepted of the Sysinternals program " + ProgramName + ": " + Str( bEulaIsSet )
ProcedureReturn bEulaIsSet
EndProcedure
; Debug CheckSysinternalsEula( "PsExec" )
; Debug CheckSysinternalsEula( "PsList" )
Für das Tool PsExec funktioniert das einwandfrei! Für andere Tools habe ich das ebenfalls noch nicht getestet. Ich habe mir jedoch den Registry-Eintrag von PsList angesehen und es sollte auch mit CheckSysinternalsEula( "PsList" ) funktionieren!
Vielleicht hilft das ja dem ein oder anderen!?
cu, helpy
Windows 10
PB Last Final / (Sometimes testing Beta versions)
PB Last Final / (Sometimes testing Beta versions)
Re: Programm - nur eine Instanz erlauben
Einmalig auf "Accept" klicken ist doch Ok?!helpy hat geschrieben:Das mit der Zustimmung zur EULA hatte mich auch gestört
"Menschenskinder, das Niveau dieses Forums singt schon wieder!" — GronkhLP ||| "ich hogffe ihr könnt den fehle endecken" — Marvin133 ||| "Ideoten gibts ..." — computerfreak ||| "Jup, danke. Gruss" — funkheld
Re: Programm - nur eine Instanz erlauben
Wenn das Programm aber wie weiter oben beschrieben von mehreren Anwendern aufgerufen wird, dann kann das schon sinnvoll sein, die EULA per Registry zu setzen. Jetzt müsste man nur noch schauen, was die Lizenz zu dieser Vorgehensweise sagt.
Windows 10
PB Last Final / (Sometimes testing Beta versions)
PB Last Final / (Sometimes testing Beta versions)
Re: Programm - nur eine Instanz erlauben
Es gibt aber einen noch einfacheren Weg:
An das Tool von Sysinternals (eigentlich ist Microsoft ja jetzt der Besitzer/Herausgeber) einfach den Schalter /accepteula anhängen!
Also im Code des Beitrags eine Zeile wie folgt ändern:
An das Tool von Sysinternals (eigentlich ist Microsoft ja jetzt der Besitzer/Herausgeber) einfach den Schalter /accepteula anhängen!
Also im Code des Beitrags eine Zeile wie folgt ändern:
Code: Alles auswählen
helpstring.s="u:\sysinternals\pslist.exe /accepteula > %tmp%\mycheck.log"
Windows 10
PB Last Final / (Sometimes testing Beta versions)
PB Last Final / (Sometimes testing Beta versions)
Re: Programm - nur eine Instanz erlauben
cool .. hab das oben mal ungetestet eingebaut
pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Re: Programm - nur eine Instanz erlauben
Ist es nicht auch möglich per P.Basic eine Console zu öffnen (im Hintergrund) - dort pslist.exe zu starten und dann auszuwerten?
Dann bräuchte man das mit der Batch Datei nicht machen...
Dann bräuchte man das mit der Batch Datei nicht machen...
Re: Programm - nur eine Instanz erlauben
[alt]
glaub mir mal das es so einfacher ist
Aber klar kannst du ne Konsole starten. Aber das "reingucken" per Programm ist mit der Ausgabe von pslist aus
irgendwelchen Gründen nicht so einfach.
[/alt]
JA !
http://www.purebasic.fr/german/viewtopi ... 13#p260313
glaub mir mal das es so einfacher ist
Aber klar kannst du ne Konsole starten. Aber das "reingucken" per Programm ist mit der Ausgabe von pslist aus
irgendwelchen Gründen nicht so einfach.
[/alt]
JA !
http://www.purebasic.fr/german/viewtopi ... 13#p260313
pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Re: Programm - nur eine Instanz erlauben
bobobo hat geschrieben:glaub mir mal das es so einfacher ist
Aber klar kannst du ne Konsole starten. Aber das "reingucken" per Programm ist mit der Ausgabe von pslist aus
irgendwelchen Gründen nicht so einfach.
Code: Alles auswählen
ProgramID = RunProgram("C:\pslist.exe", "-t", GetPathPart(ProgramFilename()), #PB_Program_Open | #PB_Program_Read | #PB_Program_Hide)
Repeat
Debug ReadProgramString(ProgramID)
Until AvailableProgramOutput(ProgramID) = 0
;KillProgram(ProgramID)
CloseProgram(ProgramID)
"Menschenskinder, das Niveau dieses Forums singt schon wieder!" — GronkhLP ||| "ich hogffe ihr könnt den fehle endecken" — Marvin133 ||| "Ideoten gibts ..." — computerfreak ||| "Jup, danke. Gruss" — funkheld