ISN AutoIt Studio CI/CD Buildpipeline Integration
Verfasst: Mo 4. Jan 2021, 18:23
Wie schon im Bugtracker unter https://www.isnetwork.at/bugtracker/ind ... ask_id=306 erwähnt, bin ich momentan dabei, meine größten Softwareprojekte in GitLab zu übertragen, um durch Continuous Integration eine automatische Kompilierung und durch Continuous Delivery eine automatische Paketierung bzw. Ausbringung der Software zu erzielen. Es gibt ja schon das Commandline Tool ISN_cmd.exe, aber aufgrund der im Bugtracker erwähnten Probleme bin ich dazu übergegangen, als Workaround die AutoIt3Wrapper.au3 zum automatischen Kompilieren zu nutzen.
Momentan sieht daher das Powershell-Skript für den Buildschritt wie folgt aus:
Eigentlich würde der Code mit dem ISN AutoIt Studio ungefähr so aussehen (mit Workaround wegen fehlendem Autoit_Studio.exe Start und Changelog-Dialog):
Außerdem gibt es noch eine Besonderheit bei 64-bit Windows im Systemkontext:
Der Fehler
tritt auf, wenn ein 32-Bit Prozess also z.B. eine AutoIt3.exe die eine AutoIt3Wrapper.au3 aufruft oder eine 32-Bit kompilierte Autoit_Studio.exe die Aut2Exe startet, die als 64-Bit Prozess läuft. Der Temp-Pfad für die Aut2Exe im Systemkontext ist durch die Umgebungsvariable %LOCALAPPDATA%=C:\WINDOWS\system32\config\systemprofile\AppData\Local\ auf C:\WINDOWS\system32\config\systemprofile\AppData\Local\AutoIt v3\Aut2exe\ gesetzt. Durch die Wow6432-Redirection wird jedoch der 32-Bit Prozess auf C:\WINDOWS\syswow64\config\systemprofile\AppData\Local\AutoIt v3\Aut2exe\ umgeleitet, sodass die kompilierte Temp-Exe nicht gefunden wird.
Zur Behebung gibt es 3 Möglichkeiten:
Momentan sieht daher das Powershell-Skript für den Buildschritt wie folgt aus:
Code: Alles auswählen
$au3path=Get-ItemPropertyValue -Path "HKLM:\SOFTWARE\WOW6432Node\AutoIt v3\AutoIt" -Name InstallDir
Start-Process -FilePath "$au3path\AutoIt3_x64.exe" -ArgumentList "`"$pwd\AutoIt3Wrapper.au3`" /autoit3dir `"$au3path`" /in project.au3 /out project.exe" -NoNewWindow -PassThru -RedirectStandardError compiler_err.log -RedirectStandardOutput compiler_out.log -Wait
Get-Content compiler_out.log
Get-Content compiler_err.log
Code: Alles auswählen
$isnpath=Get-ItemPropertyValue -Path "HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{7AAAE763-9EE4-448D-994F-94B52EEAA180}_is1" -Name "InstallLocation"
$proc=Start-Process -FilePath "$isnpath\Autoit_Studio.exe" -PassThru -Verbose
Start-Sleep -Seconds 30
& "$isnpath\Data\ISN_cmd.exe" "/isn_open_project project.isn" /isn_compile_project /isn_close_project /isn_shutdown
Stop-Process -Id $proc.Id -Force -Verbose
Der Fehler
Code: Alles auswählen
Aut2exe.exe ended with errors because the target exe wasn't created, abandon build.
Zur Behebung gibt es 3 Möglichkeiten:
- Immer 64-Bit Anwendungen nutzen, siehe oben die AutoIt3Wrapper.au3 mit der AutoIt3_x64.exe aufrufen, wenn ich das 32-Bit AutoIt Studio habe, funktioniert das nicht
- Immer 32-Bit Anwendungen nutzen, laut "ISN AutoIt Studio\Data\AutoIt3Wrapper\AutoIt3Wrapper.au3" Zeile 743ff müsste die $AUT2EXE_PGM durch einen Eintrag in der AutoIt3Wrapper.ini unter [AutoIt] aut2exe=... mit der 32-Bit Version überschrieben werden.
- Die Umgebungsvariable %LOCALAPPDATA% temporär im Skript in einen Pfad ändern, der nicht von der Redirection betroffen ist