Skip to content

Commit

Permalink
Improve WAS install pipeline (#5)
Browse files Browse the repository at this point in the history
Co-authored-by: DismissedLight <[email protected]>
  • Loading branch information
qhy040404 and Lightczx authored Jan 16, 2024
1 parent d8b3f8a commit 95d7a85
Show file tree
Hide file tree
Showing 4 changed files with 36 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
<metadata>
<id>Snap.Hutao.Deployment.Runtime</id>
<version>1.11.0</version>
<version>1.12.0</version>
<authors>DGP Studio</authors>
<developmentDependency>true</developmentDependency>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
Expand Down
5 changes: 4 additions & 1 deletion src/Snap.Hutao.Deployment/Invocation.cs
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,10 @@ private static async ValueTask ExitAsync(bool isUpdateMode)
if (!isUpdateMode)
{
Console.WriteLine("Press enter to exit...");
while (Console.ReadKey(true).Key != ConsoleKey.Enter) ;
while (Console.ReadKey(true).Key != ConsoleKey.Enter)
{
//Pending enter key
}
FreeConsole();
}
else
Expand Down
1 change: 1 addition & 0 deletions src/Snap.Hutao.Deployment/Snap.Hutao.Deployment.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@

<ItemGroup>
<PackageReference Include="System.CommandLine" Version="2.0.0-beta4.22272.1" />
<PackageReference Include="System.ServiceProcess.ServiceController" Version="8.0.0" />
</ItemGroup>

</Project>
36 changes: 30 additions & 6 deletions src/Snap.Hutao.Deployment/WindowsAppSDKDependency.cs
Original file line number Diff line number Diff line change
@@ -1,8 +1,12 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.IO.Compression;
using System.Linq;
using System.Net.Http;
using System.Runtime.InteropServices;
using System.ServiceProcess;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using Windows.Management.Deployment;
Expand All @@ -25,7 +29,7 @@ public static async Task EnsureAsync(string packagePath)
return;
}

if (CheckRuntimeInstalled(packageName, msixVersion))
if (await CheckRuntimeInstalledAndVerifyAsync(packageName, msixVersion).ConfigureAwait(false))
{
return;
}
Expand Down Expand Up @@ -63,19 +67,21 @@ private static async Task<string> ExtractSDKVersionFromDepsJsonAsync(ZipArchive
return string.Empty;
}

private static bool CheckRuntimeInstalled(string packageName, string msixVersion)
private static async Task<bool> CheckRuntimeInstalledAndVerifyAsync(string packageName, string msixVersion)
{
Version msixMinVersion = new(msixVersion);

List<bool> results = [];

foreach (Windows.ApplicationModel.Package installed in new PackageManager().FindPackages())
{
if (installed.Id.Name == packageName && installed.Id.Version.ToVersion() >= msixMinVersion)
{
return true;
results.Add(await installed.VerifyContentIntegrityAsync());
}
}

return false;
return results.Aggregate((result, element) => result || element);
}

private static async Task DownloadWindowsAppRuntimeInstallAndInstallAsync(string version)
Expand All @@ -100,6 +106,23 @@ private static async Task DownloadWindowsAppRuntimeInstallAndInstallAsync(string
}
}

ServiceController serviceController = new("appxsvc");
if (serviceController.CanStop)
{
Console.WriteLine("Stopping AppxSvc...");
serviceController.Stop();
serviceController.WaitForStatus(ServiceControllerStatus.Stopped, TimeSpan.FromSeconds(5));

if (serviceController.Status is not ServiceControllerStatus.Stopped)
{
Console.WriteLine("Can not stop AppxSvc, timeout...");
}
}
else
{
Console.WriteLine("Can not stop AppxSvc, disallowed...");
}

Console.WriteLine("Start installing SDK...");
Process installerProcess = new()
{
Expand All @@ -116,12 +139,13 @@ private static async Task DownloadWindowsAppRuntimeInstallAndInstallAsync(string
installerProcess.OutputDataReceived += (sender, e) => Console.WriteLine(e.Data);
installerProcess.ErrorDataReceived += (sender, e) => Console.WriteLine(e.Data);
installerProcess.Start();
Console.WriteLine("-----> WindowsAppRuntimeInstall Output begin -----");
Console.WriteLine("-----> WindowsAppRuntimeInstall Output begin");
installerProcess.BeginOutputReadLine();
installerProcess.BeginErrorReadLine();

await installerProcess.WaitForExitAsync().ConfigureAwait(false);
Console.WriteLine("<----- WindowsAppRuntimeInstall Output end -------");
Marshal.ThrowExceptionForHR(installerProcess.ExitCode);
Console.WriteLine("<----- WindowsAppRuntimeInstall Output end");
}
}
finally
Expand Down

0 comments on commit 95d7a85

Please sign in to comment.