Snooze wrote:[...] gibt es eine Möglichkeit den key zu schützen so das er auf anderen Rechnern nicht funktioniert? [...]
Eine Möglichkeit wäre, die Lizenzschlüsseldatei in ein selbstentpackendes und kennwortgeschütztes Archiv zu packen und den TC mit einem Script zu starten.
Unten ein entsprechendes AutoIT-Script.
Es erwartet die <wincmd.key> in einem SQX-SFX, welches mit der Option "Automatisches Dekomprimieren" und vorgegebenem Zielordner erstellt wurde. Das geht nur mit Squeez oder dem SC. Allerdings sollte es nicht zu schwierig sein, das Script an andere SFX-Archive anzupassen.
Man könnte das SFX-Archiv auch gleich den TC starten lassen, allerdings soll die <wincmd.key> nach dem Entpacken und dem erfolgreichen TC-Start gleich wieder gelöscht werden. Gibt man nun bei der Erstellung des SFX-Archivs
"cmd | /C Start totalcmd.exe && Del wincmd.key"
als auszuführendes Programm an, so wird die <wincmd.key> zu schnell gelöscht (bevor der TC sie gelesen hat). Mir ist es noch nicht geglückt, dies mit ein paar Warteschleifen vor dem "Del" zu verhindern. Daher das Ganze per Script:
TotalCmd_SecureStart.au3
Code: Select all
;==================================================================================================
;TotalCmd_SecureStart.au3 - Script für AutoIT
;--------------------------------------------------------------------------------------------------
;Erlaubt den Start des TotalCommander mit einer verschlüsselten Lizenzschlüsseldatei <wincmd.key>
;Die <wincmd.key> muss für dieses Script als selbstentpackendes SQX-Archiv
;<Unpack_wincmd_key.exe> im TC-Programmverzeichnis vorliegen.
;Das Archiv sollte folgendermaßen erstellt worden sein (mit Squeez oder SC):
;* Verschlüsselung: Sinnvollerweise ja (nur Entpackschutz)
;* Typ: Normales SFX
;* Zielordner fürs Dekomprimieren: {TC-Programmverzeichnis}
;* Erweitert: Automatisches Dekomprimieren
;==================================================================================================
;*** TC-Programmverzeichnis
$tcpath = @ProgramFilesDir & "\TotalCmd"
;*** Annahme: Die wincmd.key liegt im TC-Programmverzeichnis
$tckeyexistsfromstart = FileExists($tcpath & "\wincmd.key")
;*** Kommandozeilenparameter verketten (ginge mit "$CmdRawLine" sicherlich auch irgendwie)
$cmdlineparam = ""
For $i = 1 to $CmdLine[0]
$cmdlineparam = $cmdlineparam & $CmdLine[$i] & " "
Next
;*** Wenn bereits eine wincmd.key existiert, Warnmeldung ausgeben (Script wird aber fortgesetzt)
If $tckeyexistsfromstart Then
MsgBox(0+48, "TotalCmd Secure Start", _
"Im Pfad" & @LF & $tcpath & @LF & "ist ein ungeschützter Lizenzschlüssel vorhanden!")
EndIf
;*** Wenn TC bereits läuft, TC aktivieren und Kommandozeilenparameter übergeben
If ProcessExists("TOTALCMD.EXE") Then
Run($tcpath & "\TotalCmd.exe" & " /O " & $cmdlineparam)
;*** Wenn TC noch nicht läuft...
Else
;*** wincmd.key entpacken, sofern nicht bereits vorhanden
If NOT $tckeyexistsfromstart Then RunWait($tcpath & "\Unpack_wincmd_key.exe")
;*** TC starten und Kommandozeilenparameter übergeben
Run($tcpath & "\TotalCmd.exe" & " /O " & $cmdlineparam)
;*** Warten, bis TC gestartet ist
ProcessWait("TOTALCMD.EXE", 5)
;*** Wenn die wincmd.key durch das Script bereitgestellt wurde, diese nun wieder löschen
If NOT $tckeyexistsfromstart Then
FileDelete($tcpath & "\wincmd.key")
If @error Then
MsgBox(0+48, "TotalCmd Secure Start", _
"Die Lizenzschlüsseldatei" & @LF & "wincmd.key" & @LF & "konnte nicht gelöscht werden")
EndIf
EndIf
EndIf