Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support for PowerShell cmdlets in admin mode #2642

Merged
merged 52 commits into from
Dec 3, 2022
Merged
Show file tree
Hide file tree
Changes from 41 commits
Commits
Show all changes
52 commits
Select commit Hold shift + click to select a range
6307854
save work
Oct 20, 2022
00c91f1
Merge branch 'master' of https://github.com/ryfu-msft/winget-cli into…
Oct 20, 2022
ccaa1dc
save work
Oct 21, 2022
e3dda96
save work
Oct 22, 2022
4d732c2
add E2E tests for powershell module
Oct 26, 2022
0febd74
revert unnecessary changes
Oct 26, 2022
0a11caa
fix build issues
Oct 26, 2022
6813160
try again
Oct 26, 2022
f1d7b45
address PR comments
Nov 2, 2022
74414ae
fix build issues
Nov 3, 2022
71633e0
set execution policy
Nov 4, 2022
adc0c05
try again
Nov 4, 2022
bd96353
fix spacing
Nov 4, 2022
04524b6
run module in powershell task
Nov 4, 2022
0b68135
install test package
Nov 4, 2022
7626067
enable verbose logging
Nov 4, 2022
a7a8c78
fix x86 and add error code to output
Nov 7, 2022
9fe098e
fix path
Nov 7, 2022
b9d7aff
copy winrt act properly
Nov 7, 2022
ddb488b
fix x86 build output
Nov 8, 2022
987fad6
add com tracing
Nov 8, 2022
f0836e6
continue on error
Nov 9, 2022
9590eae
comment out e2e tests
Nov 9, 2022
ecd46bd
always run task
Nov 9, 2022
d1e55e7
publish appx package
Nov 9, 2022
708e082
Enable logging for com
Nov 14, 2022
0809143
try different order
Nov 14, 2022
1ca4064
remove explicity fail error
Nov 14, 2022
5075f5b
try again
Nov 14, 2022
8a9b956
revert all changes
Nov 14, 2022
8f68d4d
uncomment tests
Nov 14, 2022
cf5a0ef
remove teardown form powershell module test
Nov 14, 2022
b149685
remove unnecessary changes
Nov 14, 2022
eabc286
fix powershell module e2e test
Nov 15, 2022
d4c466f
separate powershell tests
Nov 15, 2022
38a20af
Fix E2E tests
Nov 15, 2022
6918fb9
rejoin powershell tests
Nov 15, 2022
3ff22d1
fix binskim
Nov 16, 2022
b66ebb7
Address PR comments
Nov 22, 2022
e1aeb9e
resolve merge conflicts
Nov 22, 2022
6f4885b
fix path in project file
Nov 22, 2022
3c19802
respond to PR feedback
Nov 28, 2022
9957cd8
fix build dependencies
Nov 28, 2022
190a6b9
fix manual reset event
Nov 30, 2022
a305bab
fix build warnings and errors
Dec 1, 2022
5a9d0a2
revert flags parameter
Dec 2, 2022
ffef20d
Merge branch 'master' of https://github.com/ryfu-msft/winget-cli into…
Dec 2, 2022
7b1362a
fix spelling
Dec 3, 2022
9d587c8
more spelling
Dec 3, 2022
4ff0887
even more spelling
Dec 3, 2022
0d4edb0
remove Reset event
Dec 3, 2022
bb04705
fix line spacing
Dec 3, 2022
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -329,3 +329,8 @@ ASALocalRun/

# MFractors (Xamarin productivity tool) working folder
.mfractor/

# Generated files from WinGetServer.idl
**/WinGetServer/WinGetServer.h
**/WinGetServer/WinGetServer_c.c
**/WinGetServer/WinGetServer_s.c
25 changes: 13 additions & 12 deletions azure-pipelines.yml
Original file line number Diff line number Diff line change
Expand Up @@ -213,12 +213,6 @@ jobs:
CleanTargetFolder: false
OverWrite: true

- template: templates/e2e-test.template.yml
parameters:
title: "E2E Tests Packaged"
isPackaged: true
filter: "TestCategory!=InProcess&TestCategory!=OutOfProcess"

- task: PowerShell@2
displayName: 'Set program files directory'
inputs:
Expand All @@ -238,12 +232,6 @@ jobs:
TargetFolder: '$(platformProgramFiles)\dotnet'
Contents: resources.pri

- template: templates/e2e-test.template.yml
parameters:
title: "COM API E2E Tests (In-process)"
isPackaged: false
filter: "TestCategory=InProcess"

# Winmd accessed by test runner process (dotnet.exe)
- task: CopyFiles@2
displayName: 'Copy winmd to dotnet directory'
Expand All @@ -260,6 +248,18 @@ jobs:
TargetFolder: 'src\AppInstallerCLIPackage\bin\$(buildPlatform)\$(buildConfiguration)'
Contents: Microsoft.Management.Deployment.winmd

- template: templates/e2e-test.template.yml
parameters:
title: "E2E Tests Packaged"
isPackaged: true
filter: "TestCategory!=InProcess&TestCategory!=OutOfProcess"

- template: templates/e2e-test.template.yml
parameters:
title: "COM API E2E Tests (In-process)"
isPackaged: false
filter: "TestCategory=InProcess"

- template: templates/e2e-test.template.yml
parameters:
title: "COM API E2E Tests (Out-of-process)"
Expand Down Expand Up @@ -305,6 +305,7 @@ jobs:
inputs:
filePath: 'src\PowerShell\Microsoft.WinGet.Client\Copy-PlatformBinaries.ps1'
arguments: '-Platform $(buildPlatform) -Configuration $(buildConfiguration) -OutDir $(artifactsDir)\PowerShell'
condition: always()

- task: PublishPipelineArtifact@1
displayName: Publish Pipeline Artifacts
Expand Down
4 changes: 2 additions & 2 deletions src/AppInstallerCLI.sln
Original file line number Diff line number Diff line change
Expand Up @@ -990,8 +990,8 @@ Global
{31ED69A8-5310-45A9-953F-56C351D2C3E1}.Release|ARM64.ActiveCfg = Debug|Win32
{31ED69A8-5310-45A9-953F-56C351D2C3E1}.Release|x64.ActiveCfg = Release|x64
{31ED69A8-5310-45A9-953F-56C351D2C3E1}.Release|x64.Build.0 = Release|x64
{31ED69A8-5310-45A9-953F-56C351D2C3E1}.Release|x86.ActiveCfg = Debug|Win32
{31ED69A8-5310-45A9-953F-56C351D2C3E1}.Release|x86.Build.0 = Debug|Win32
{31ED69A8-5310-45A9-953F-56C351D2C3E1}.Release|x86.ActiveCfg = Release|Win32
{31ED69A8-5310-45A9-953F-56C351D2C3E1}.Release|x86.Build.0 = Release|Win32
{31ED69A8-5310-45A9-953F-56C351D2C3E1}.TestRelease|Any CPU.ActiveCfg = Debug|Win32
{31ED69A8-5310-45A9-953F-56C351D2C3E1}.TestRelease|Any CPU.Build.0 = Debug|Win32
{31ED69A8-5310-45A9-953F-56C351D2C3E1}.TestRelease|ARM.ActiveCfg = Debug|Win32
Expand Down
11 changes: 11 additions & 0 deletions src/AppInstallerCLIE2ETests/Constants.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ public class Constants
public const string MsiInstallerPathParameter = "MsiTestInstallerPath";
public const string MsixInstallerPathParameter = "MsixTestInstallerPath";
public const string PackageCertificatePathParameter = "PackageCertificatePath";
public const string PowerShellModulePathParameter = "PowerShellModulePath";
public const string AppInstallerTestCert = "AppInstallerTest.cer";
public const string AppInstallerTestCertThumbprint = "d03e7a688b388b1edde8476a627531c49db88017";

Expand Down Expand Up @@ -74,6 +75,16 @@ public class Constants
public const string TestExeUninstallerFileName = "UninstallTestExe.bat";
public const string TestExeUninstalledFileName = "TestExeUninstalled.txt";

// PowerShell Cmdlets
public const string FindCmdlet = "Find-WinGetPackage";
public const string GetCmdlet = "Get-WinGetPackage";
public const string GetSourceCmdlet = "Get-WinGetSource";
public const string InstallCmdlet = "Install-WinGetPackage";
public const string UninstallCmdlet = "Uninstall-WinGetPackage";
public const string UpdateCmdlet = "Update-WinGetPackage";

public const string WinGetServerExeName = "WindowsPackageManagerServer";
ryfu-msft marked this conversation as resolved.
Show resolved Hide resolved

// Locations
public const string LocalAppData = "LocalAppData";

Expand Down
177 changes: 177 additions & 0 deletions src/AppInstallerCLIE2ETests/PowerShell/PowerShellModule.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,177 @@
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.

namespace AppInstallerCLIE2ETests.PowerShell
{
using NUnit.Framework;
using System;
using System.Diagnostics;
using System.Linq;
using System.Threading;

/// <summary>
/// Basic E2E smoke tests for verifying the behavior of the PowerShell module cmdlets.
/// </summary>
[Category("PowerShell")]
public class PowerShellModule
{
// TODO: Consider using Pester framework for conducting more extensive PowerShell module tests.

[OneTimeSetUp]
public void Setup()
{
TestCommon.RunAICLICommand("source add", $"-n {Constants.TestSourceName} {Constants.TestSourceUrl}");
}

[OneTimeTearDown]
public void TearDown()
{
// TODO: This is a workaround to an issue where the server takes longer than expected to terminate when
// running from the E2E tests. This can cause other E2E tests to fail when attempting to reset the test source.
if (IsRunning(Constants.WinGetServerExeName))
{
// There should only be one WinGetServer process running at a time.
Process serverProcess = Process.GetProcessesByName(Constants.WinGetServerExeName).First();
serverProcess.Kill();
}

TestCommon.RunAICLICommand("source remove", $"{Constants.TestSourceName}");
}

[Test]
public void AssertServerShutdownAfterExecution()
{
if (!Environment.Is64BitProcess)
{
return;
}

TestCommon.RunPowerShellCommandWithResult(Constants.GetSourceCmdlet, $"-Name {Constants.TestSourceName}");
ryfu-msft marked this conversation as resolved.
Show resolved Hide resolved

Assert.IsTrue(IsRunning(Constants.WinGetServerExeName), $"{Constants.WinGetServerExeName} is not running.");
Process serverProcess = Process.GetProcessesByName(Constants.WinGetServerExeName).First();

// Wait a maximum of 30 seconds for the server process to exit.
bool serverProcessExit = serverProcess.WaitForExit(30000);
Assert.IsTrue(serverProcessExit, $"{Constants.WinGetServerExeName} failed to terminate after creating COM object.");
}

[Test]
public void GetWinGetSource()
{
// Running the x86 PowerShell Module requires PowerShell Core (x86). The tests currently only target PowerShell Core (x64)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

// Running the x86 PowerShell Module requires PowerShell Core (x86). The tests currently only target PowerShell Core (x64)

nit: Since all tests target x64, this comment should move to around top of the test class.

And do we plan to target x86 in the future?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

To support x86 tests, we will need to manually install powershell core (x86) and have the E2E tests target that when running the tests. Since this is mainly just for smoke-testing, I don't currently have plans to target x86. Testing should be carried out through the Pester framework which will be more thorough since that is required for publishing to the gallery.

if (!Environment.Is64BitProcess)
{
return;
}

var getSourceResult = TestCommon.RunPowerShellCommandWithResult(Constants.GetSourceCmdlet, $"-Name {Constants.TestSourceName}");
Assert.IsTrue(getSourceResult.ExitCode == 0, $"ExitCode: {getSourceResult.ExitCode} Failed with the following output: {getSourceResult.StdOut}, {getSourceResult.StdErr}");
ryfu-msft marked this conversation as resolved.
Show resolved Hide resolved
Assert.IsTrue(getSourceResult.StdOut.Contains($"{Constants.TestSourceName}"));
}

[Test]
public void FindWinGetPackage()
{
if (!Environment.Is64BitProcess)
{
return;
}

var result = TestCommon.RunPowerShellCommandWithResult(Constants.FindCmdlet, $"-Id {Constants.ExeInstallerPackageId}");
Assert.IsTrue(result.ExitCode == 0, $"ExitCode: {result.ExitCode} Failed with the following output: {result.StdOut}; {result.StdErr}");
Assert.IsTrue(result.StdOut.Contains("TestExeInstaller"));
}

[Test]
public void GetWinGetPackage()
{
if (!Environment.Is64BitProcess)
{
return;
}

var installResult = TestCommon.RunPowerShellCommandWithResult(Constants.InstallCmdlet, $"-Id {Constants.MsiInstallerPackageId}");
var getResult = TestCommon.RunPowerShellCommandWithResult(Constants.GetCmdlet, $"-Id {Constants.MsiInstallerPackageId}");
var uninstallResult = TestCommon.RunPowerShellCommandWithResult(Constants.UninstallCmdlet, $"-Id {Constants.MsiInstallerPackageId}");

Assert.IsTrue(installResult.ExitCode == 0, $"ExitCode: {installResult.ExitCode}; Failed with the following output: {installResult.StdOut}; {installResult.StdErr}");
Assert.IsTrue(getResult.ExitCode == 0, $"Failed with the following output: {getResult.StdOut}");
Assert.IsTrue(uninstallResult.ExitCode == 0, $"Failed with the following output: {uninstallResult.StdOut}");

Assert.IsTrue(!string.IsNullOrEmpty(installResult.StdOut));
Assert.IsTrue(getResult.StdOut.Contains("TestMsiInstaller"));
Assert.IsTrue(!string.IsNullOrEmpty(uninstallResult.StdOut));
}

[Test]
public void InstallWinGetPackage()
{
if (!Environment.Is64BitProcess)
{
return;
}

var installResult = TestCommon.RunPowerShellCommandWithResult(Constants.InstallCmdlet, $"-Id {Constants.ExeInstallerPackageId}");
var uninstallResult = TestCommon.RunPowerShellCommandWithResult(Constants.UninstallCmdlet, $"-Id {Constants.ExeInstallerPackageId}");

Assert.IsTrue(installResult.ExitCode == 0, $"ExitCode: {installResult.ExitCode}; Failed with the following output: {installResult.StdOut}; {installResult.StdErr}");
Assert.IsTrue(uninstallResult.ExitCode == 0, $"Failed with the following output: {uninstallResult.StdOut}");

Assert.IsTrue(!string.IsNullOrEmpty(installResult.StdOut));
Assert.IsTrue(!string.IsNullOrEmpty(uninstallResult.StdOut));
}

[Test]
public void UpdateWinGetPackage()
{
if (!Environment.Is64BitProcess)
{
return;
}

var installResult = TestCommon.RunPowerShellCommandWithResult(Constants.InstallCmdlet, $"-Id {Constants.ExeInstallerPackageId} -Version 1.0.0.0");
var updateResult = TestCommon.RunPowerShellCommandWithResult(Constants.UpdateCmdlet, $"-Id {Constants.ExeInstallerPackageId}");
var getResult = TestCommon.RunPowerShellCommandWithResult(Constants.GetCmdlet, $"-Id {Constants.ExeInstallerPackageId}");
var uninstallResult = TestCommon.RunPowerShellCommandWithResult(Constants.UninstallCmdlet, $"-Id {Constants.ExeInstallerPackageId}");

Assert.IsTrue(installResult.ExitCode == 0, $"Failed with the following output: {installResult.StdOut}");
Assert.IsTrue(updateResult.ExitCode == 0, $"Failed with the following output: {updateResult.StdOut}");
Assert.IsTrue(getResult.ExitCode == 0, $"Failed with the following output: {getResult.StdOut}");
Assert.IsTrue(uninstallResult.ExitCode == 0, $"Failed with the following output: {uninstallResult.StdOut}");

Assert.IsTrue(!string.IsNullOrEmpty(installResult.StdOut));
Assert.IsTrue(!string.IsNullOrEmpty(updateResult.StdOut));
Assert.IsTrue(getResult.StdOut.Contains("2.0.0.0"));
Assert.IsTrue(!string.IsNullOrEmpty(uninstallResult.StdOut));
}

/// <summary>
/// There is a known issue where the server takes an abnormally long time to terminate after the E2E test pwsh processes finish execution.
/// This test verifies that the server does indeed terminate within 5 minutes after running all of the cmdlets.
/// Commented out to reduce the overall duration of the build pipeline.
/// </summary>
// [Test]
public void VerifyServerTermination()
{
TestCommon.RunPowerShellCommandWithResult(Constants.GetSourceCmdlet, $"-Name {Constants.TestSourceName}");
TestCommon.RunPowerShellCommandWithResult(Constants.FindCmdlet, $"-Id {Constants.ExeInstallerPackageId}");
TestCommon.RunPowerShellCommandWithResult(Constants.InstallCmdlet, $"-Id {Constants.ExeInstallerPackageId} -Version 1.0.0.0");
TestCommon.RunPowerShellCommandWithResult(Constants.UpdateCmdlet, $"-Id {Constants.ExeInstallerPackageId}");
TestCommon.RunPowerShellCommandWithResult(Constants.GetCmdlet, $"-Id {Constants.ExeInstallerPackageId}");
TestCommon.RunPowerShellCommandWithResult(Constants.UninstallCmdlet, $"-Id {Constants.ExeInstallerPackageId}");

Assert.IsTrue(IsRunning(Constants.WinGetServerExeName), $"{Constants.WinGetServerExeName} is not running.");
Process serverProcess = Process.GetProcessesByName(Constants.WinGetServerExeName).First();

// Wait a maximum of 5 minutes for the server process to exit.
bool serverProcessExit = serverProcess.WaitForExit(300000);
Assert.IsTrue(serverProcessExit, $"{Constants.WinGetServerExeName} failed to terminate after creating COM object.");
}

private bool IsRunning(string processName)
{
return Process.GetProcessesByName(processName).Length > 0;
}
}
}
5 changes: 4 additions & 1 deletion src/AppInstallerCLIE2ETests/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,8 @@ Therefore to run the executable in the command line, simply change into the dire
| StaticFileRootPath | Path to the set of static test files that will be served as the source for testing purposes. This path should be identical to the one provided to the LocalHostWebServer|
| MsixTestInstallerPath | The MSIX (or APPX) Installer executable under test. |
| ExeTestInstallerPath |The Exe Installer executable under test. |
| PackageCertificatePath |Signing Certificate Path used to certify test index source package|
| PackageCertificatePath | Signing Certificate Path used to certify test index source package |
| PowerShellModulePath | Path to the PowerShell module manifest file under test |

#### Example of Test.runsettings format:

Expand All @@ -72,6 +73,7 @@ Therefore to run the executable in the command line, simply change into the dire
<Parameter name="MsixTestInstallerPath" value="MsixTestInstaller.msix" />
<Parameter name="ExeTestInstallerPath" value="ExeTestInstaller.exe" />
<Parameter name="PackageCertificatePath" value="certificate.pfx"/>
<Parameter name="PowerShellModulePath" value="TestPowerShellModule.psd1" />
</TestRunParameters>
</RunSettings>

Expand All @@ -90,6 +92,7 @@ Make sure to replace **MSFT** with your own user name. Modifying this example wi
<Parameter name="MsixTestInstallerPath" value="C:\Users\MSFT\Temp\MsixTestInstaller.msix" />
<Parameter name="ExeTestInstallerPath" value="C:\Users\MSFT\source\repos\winget-cli\src\x64\Debug\AppInstallerTestExeInstaller\AppInstallerTestExeInstaller.exe" />
<Parameter name="PackageCertificatePath" value="C:\Users\MSFT\Temp\packageCertificate.pfx"/>
<Parameter name="PowerShellModulePath" value="C:\Users\MSFT\source\repos\winget-cli\src\x64\Debug\PowerShell\Microsoft.WinGet.Client.psd1" />
</TestRunParameters>
</RunSettings>

Expand Down
6 changes: 5 additions & 1 deletion src/AppInstallerCLIE2ETests/SetUpFixture.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ namespace AppInstallerCLIE2ETests
{
using Microsoft.Win32;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using NUnit.Framework;
using System;
using System.IO;
Expand Down Expand Up @@ -96,6 +95,11 @@ public void Setup()
TestCommon.PackageCertificatePath = TestContext.Parameters.Get(Constants.PackageCertificatePathParameter);
}

if (TestContext.Parameters.Exists(Constants.PowerShellModulePathParameter))
{
TestCommon.PowerShellModulePath = TestContext.Parameters.Get(Constants.PowerShellModulePathParameter);
}

ReadTestInstallerPaths();

TestIndexSetup.GenerateTestDirectory();
Expand Down
2 changes: 2 additions & 0 deletions src/AppInstallerCLIE2ETests/Test.runsettings
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
MsixTestInstallerPath: The MSIX (or APPX) Installer executable under test.
ExeTestInstallerPath: The Exe Installer executable under test.
PackageCertificatePath: Signing Certificate Path used to certify Index Source Package
PowerShellModulePath: Path to the PowerShell module manifest file under test
-->
<TestRunParameters>
<Parameter name="PackagedContext" value="true" />
Expand All @@ -32,5 +33,6 @@
<Parameter name="MsixTestInstallerPath" value="MsixTestInstaller.msix" />
<Parameter name="ExeTestInstallerPath" value="ExeTestInstaller.exe" />
<Parameter name="PackageCertificatePath" value="certificate.pfx"/>
<Parameter name="PowerShellModulePath" value="TestPowerShellModule.psd1" />
</TestRunParameters>
</RunSettings>
7 changes: 7 additions & 0 deletions src/AppInstallerCLIE2ETests/TestCommon.cs
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@ public class TestCommon

public static string PackageCertificatePath { get; set; }

public static string PowerShellModulePath { get; set; }

public static string SettingsJsonFilePath {
get
{
Expand Down Expand Up @@ -252,6 +254,11 @@ public static RunCommandResult RunCommandWithResult(string fileName, string args
return result;
}

public static RunCommandResult RunPowerShellCommandWithResult(string cmdlet, string args, int timeOut = 60000)
{
return RunCommandWithResult("pwsh.exe", $"-Command ipmo {PowerShellModulePath}; {cmdlet} {args}", timeOut);
}

public static string GetTestFile(string fileName)
{
return Path.Combine(TestContext.CurrentContext.TestDirectory, fileName);
Expand Down
10 changes: 10 additions & 0 deletions src/AppInstallerCLIPackage/Package.appxmanifest
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,16 @@
<uap5:ExecutionAlias Alias="WinGetDev.exe" />
</uap5:AppExecutionAlias>
</uap5:Extension>
</Extensions>
</Application>
<Application Id="WinGetComServer" Executable="WinGetServer\WindowsPackageManagerServer.exe" EntryPoint="Windows.FullTrustApplication">
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does this require changes in AppInstaller manifest or this is just for dev testing

<uap:VisualElements DisplayName="WinGet Dev COM Server" Square150x150Logo="Images\Square150x150Logo.png" Square44x44Logo="Images\Square44x44Logo.png" Description="The WinGet COM server." BackgroundColor="#0078d7" AppListEntry="none" />
<Extensions>
<uap5:Extension Category="windows.appExecutionAlias">
<uap5:AppExecutionAlias>
<uap5:ExecutionAlias Alias="WindowsPackageManagerServerDev.exe" />
</uap5:AppExecutionAlias>
</uap5:Extension>
<com:Extension Category="windows.comServer">
<com:ComServer>
<com:ExeServer Executable="WinGetServer\WindowsPackageManagerServer.exe" DisplayName="Windows Package Manager Server" LaunchAndActivationPermission="O:SYG:SYD:(A;;11;;;WD)(A;;11;;;RC)(A;;11;;;AC)(A;;11;;;AN)S:P(ML;;NX;;;S-1-16-0)">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@

namespace Microsoft.WinGet.Client.Commands
{
using System;
using System.Management.Automation;
using Microsoft.Management.Deployment;
using Microsoft.WinGet.Client.Common;
Expand Down
Loading