From 8af95d8dbd1cf11b25aeb8225ad721c99807858e Mon Sep 17 00:00:00 2001 From: Andrew Kahr <22359829+AndrewKahr@users.noreply.github.com> Date: Sun, 10 Dec 2023 17:02:50 -0800 Subject: [PATCH] Fix possible hang --- dist/platforms/windows/activate.ps1 | 46 ++++++++++++++++------ dist/platforms/windows/return_license.ps1 | 48 +++++++++++++++++------ 2 files changed, 71 insertions(+), 23 deletions(-) diff --git a/dist/platforms/windows/activate.ps1 b/dist/platforms/windows/activate.ps1 index ee9cb2100..cc4ac5a5a 100644 --- a/dist/platforms/windows/activate.ps1 +++ b/dist/platforms/windows/activate.ps1 @@ -15,18 +15,40 @@ if ( ($null -ne ${env:UNITY_SERIAL}) -and ($null -ne ${env:UNITY_EMAIL}) -and ($ # Write-Output "Requesting activation" - $ACTIVATION_OUTPUT = Start-Process -NoNewWindow -Wait -PassThru "$Env:UNITY_PATH/Editor/Unity.exe" ` - -ArgumentList ` - "-batchmode ` - -quit ` - -nographics ` - -username $Env:UNITY_EMAIL ` - -password $Env:UNITY_PASSWORD ` - -serial $Env:UNITY_SERIAL ` - -projectPath c:/BlankProject ` - -logfile -" - - $ACTIVATION_EXIT_CODE = $ACTIVATION_OUTPUT.ExitCode + $ACTIVATION_OUTPUT = Start-Process -FilePath "$Env:UNITY_PATH/Editor/Unity.exe" ` + -NoNewWindow ` + -PassThru ` + -ArgumentList "-batchmode ` + -quit ` + -nographics ` + -username $Env:UNITY_EMAIL ` + -password $Env:UNITY_PASSWORD ` + -serial $Env:UNITY_SERIAL ` + -projectPath c:/BlankProject ` + -logfile -" + + # Cache the handle so exit code works properly + # https://stackoverflow.com/questions/10262231/obtaining-exitcode-using-start-process-and-waitforexit-instead-of-wait + $unityHandle = $ACTIVATION_OUTPUT.Handle + + while ($true) { + if ($ACTIVATION_OUTPUT.HasExited) { + $ACTIVATION_EXIT_CODE = $ACTIVATION_OUTPUT.ExitCode + + # Display results + if ($ACTIVATION_EXIT_CODE -eq 0) + { + Write-Output "Activation Succeeded" + } else + { + Write-Output "Activation failed, with exit code $ACTIVATION_EXIT_CODE" + } + + break + } + + Start-Sleep -Seconds 3 + } } else { diff --git a/dist/platforms/windows/return_license.ps1 b/dist/platforms/windows/return_license.ps1 index dee4b2987..edf7ec2e4 100644 --- a/dist/platforms/windows/return_license.ps1 +++ b/dist/platforms/windows/return_license.ps1 @@ -6,21 +6,47 @@ Write-Output "# Return License #" Write-Output "###########################" Write-Output "" -if ($null -ne ${env:UNITY_SERIAL}) +if (($null -ne ${env:UNITY_SERIAL}) -and ($null -ne ${env:UNITY_EMAIL}) -and ($null -ne ${env:UNITY_PASSWORD})) { # # SERIAL LICENSE MODE # # This will return the license that is currently in use. # - $RETURN_OUTPUT = Start-Process -NoNewWindow -Wait -PassThru "$Env:UNITY_PATH/Editor/Unity.exe" ` - -ArgumentList ` - "-batchmode ` - -quit ` - -nographics ` - -username $Env:UNITY_EMAIL ` - -password $Env:UNITY_PASSWORD ` - -returnlicense ` - -projectPath c:/BlankProject ` - -logfile -" + $RETURN_LICENSE_OUTPUT = Start-Process -FilePath "$Env:UNITY_PATH/Editor/Unity.exe" ` + -NoNewWindow ` + -PassThru ` + -ArgumentList "-batchmode ` + -quit ` + -nographics ` + -username $Env:UNITY_EMAIL ` + -password $Env:UNITY_PASSWORD ` + -returnlicense ` + -projectPath c:/BlankProject ` + -logfile -" + + # Cache the handle so exit code works properly + # https://stackoverflow.com/questions/10262231/obtaining-exitcode-using-start-process-and-waitforexit-instead-of-wait + $unityHandle = $RETURN_LICENSE_OUTPUT.Handle + + while ($true) { + if ($RETURN_LICENSE_OUTPUT.HasExited) { + $RETURN_LICENSE_EXIT_CODE = $RETURN_LICENSE_OUTPUT.ExitCode + + # Display results + if ($RETURN_LICENSE_EXIT_CODE -eq 0) + { + Write-Output "License Return Succeeded" + } else + { + Write-Output "License Return failed, with exit code $RETURN_LICENSE_EXIT_CODE" + Write-Output "::warning ::License Return failed! If this is a Pro License you might need to manually ` +free the seat in your Unity admin panel or you might run out of seats to activate with." + } + + break + } + + Start-Sleep -Seconds 3 + } }