[startvm]
key=
Was soll hier eingetragen werden? Wie geht das, wenn ich mehrere unterschiedliche VMs so starten will? Und: bis vor kurzem ging es einfach so, als Parameter nach dem Portable-VirtualBox.exe Aufruf. Da konnte ich einfach Verknüpfung machen, und die Geschichte war erledigt. Dieser Parameter wird aber mittlerweile nicht weitergeleitet. Warum nur?
An diesem Code wurde eigentlich nichts geändert. Leider sind die Entwicklungsressourcen momentan sehr knapp, vllt kannst du selbst mal nachsehen?
OK, ich glaube, ich habe die Denkfehler gefunden. In Revision 44 werden ab Zeile 733 die Parameter interpretiert. Dabei wird in der Zeile 737 überprüft, ob die %userhome% den Standardwert hat und ob die virtuelle Festplatte mit dem Namen, der als erster Parameter übergeben war, existiert. Und zwar unbedingt als VDI. Das Letzte ist völliger Quatsch. Was ist, wenn ich die Festpalte im anderen Format habe? Was ist, wenn ich die anders als Maschine selbst benannt habe?
Hier soll man überprüfen, ob im „\data\.VirtualBox\Machines\“ ein Verzeichnis mit der Namen der Maschine existiert, also der ersten Parameter. Eventuell auch ein .vbox oder .xml Datei mit dem gleichen Namen drin, aber dessen bin ich mir nicht so sicher. Auf jedem Fall macht es keinen Sinn, nach der Festplatte zu suchen.
Kann man das korrigieren? Wann ist mit der korrigierten Version zu rechnen?
Das Gleiche gilt auch für die Auswahl des zu startendes VM in Einstellungen. Hier wird z. Zt. Eine virtuelle Festplatte ausgewählt. Es muss aber ein VM selbst, also Verzeichnis oder die Beschreibungsdatei in diesem Verzeichnis, sein. Sehe dazu die Beschreibung von VBoxManage.
Das leichteste wäre, du würdest direkt hier ein Patchfile anbieten, da ich nicht weiß, wann einer der 3 Projektmitglieder dazu kommt, sich die Sache mal anzuschauen. Wenn du willst, können wir dich sicher auch zu den Entwicklern hinzufügen, damit solltest du schreibzugriff aufs SVN bekommen...
Eigentlich kein Problem für mich, es geht schließlich um 2 Änderungen in 2 Zeilen. Die kann ich auch hier posten. Aber: man soll das auch vorher testen, und ich habe keine Ahnung wegen Debuggen mit Auto-It. Wenn mir da jemand helfen oder erklären kann, dann werde ich das auch tun, sonst kann ich einfach die Zeilen hier veröffentlichen, und jemand testet es dann. Wegen 2 Zeilen werde ich nicht so viel Aufwand mit Zugang und Rechten treiben.
Here are the corrections for using VM folder name and not the hard disk file name as a start parameter of the portable VBox for automatic start of some VM. Right now the AutoIt script checks and uses the hard disk file name, which is simply not correct.
The first change is for using the start parameter for checking of VM folder existence, not the hard disk file existence. So it can work this correct way.
Line 737
If IniRead ($var1, "userhome", "key", "NotFound") = "%CD%\data\.VirtualBox" AND FileExists (@ScriptDir&"\data\.VirtualBox\HardDisks\"&$CmdLine[1]&".vdi") Then
to
If IniRead ($var1, "userhome", "key", "NotFound") = "%CD%\data\.VirtualBox" AND FileExists (@ScriptDir&"\data\.VirtualBox\Machines\"&$StartVM) Then
The second change is for VM choose functionality in settings, so the user would choose the VM folder and not the hard disk file.
From Line 1249
Local $Start_VM = IniRead ($var1, "startvm", "key", "NotFound")
If IniRead ($var1, "startvm", "key", "NotFound") Then
If FileExists (@ScriptDir&"\data\.VirtualBox\HardDisks\") Then
$PathVM = FileOpenDialog (IniRead ($var2 & $lng &".ini", "srcstartvm", "01", "NotFound"), $Start_VM&"\.VirtualBox\HardDisks", "VirtualBox VM (*.vdi)", 1+2)
EndIf
Else
If FileExists (@ScriptDir&"\data\.VirtualBox\HardDisks\") Then
$PathVM = FileOpenDialog (IniRead ($var2 & $lng &".ini", "srcstartvm", "01", "NotFound"), @ScriptDir&"\data\.VirtualBox\HardDisks", "VirtualBox VM (*.vdi)", 1+2)
EndIf
EndIf
If NOT @error Then
$VM_String = StringSplit ($PathVM, "\")
$String = ""
For $VDI In $VM_String
$String = $VDI
Next
$VM_Start = StringSplit ($String, ".")
GUICtrlSetState ($Radio4, $GUI_CHECKED)
GUICtrlSetData ($VMStart, $VM_Start[1])
EndIf
to
Local $Start_VM = IniRead ($var1, "startvm", "key", "NotFound")
If IniRead ($var1, "startvm", "key", "NotFound") Then
If FileExists (@ScriptDir&"\data\.VirtualBox\HardDisks\") Then
$PathVM = FileSelectFolder (IniRead ($var2 & $lng &".ini", "srcstartvm", "01", "NotFound"), "", 2, $Start_VM&"\.VirtualBox\Machines")
EndIf
Else
If FileExists (@ScriptDir&"\data\.VirtualBox\HardDisks\") Then
$PathVM = FileSelectFolder (IniRead ($var2 & $lng &".ini", "srcstartvm", "01", "NotFound"), "", 2, @ScriptDir&"\data\.VirtualBox\Machines")
EndIf
EndIf
If NOT @error Then
$VM_String = StringSplit ($PathVM, "\")
$String = ""
For $VDI In $VM_String
$String = $VDI
Next
$VM_Start = $String
GUICtrlSetState ($Radio4, $GUI_CHECKED)
GUICtrlSetData ($VMStart, $VM_Start[1])
EndIf
As I said, this should be tested, if it works as it should. I wrote it down anyway, so it would be easier and I wouldn’t forget all this changes.