@@ -2,17 +2,16 @@ import 'dart:async';
22import 'dart:io' ;
33
44import 'package:args/command_runner.dart' ;
5- import 'package:process_run/shell_run.dart' ;
65import 'package:revitool/core/ms_store/ms_store_command.dart' ;
76import 'package:revitool/core/security/security_service.dart' ;
87import 'package:revitool/core/winsxs/win_package_service.dart' ;
98import 'package:revitool/shared/win_registry_service.dart' ;
9+ import 'package:revitool/utils.dart' ;
1010
1111class WindowsPackageCommand extends Command <String > {
1212 static final _winPackageService = WinPackageService ();
1313 static final _msStoreCommand = MSStoreCommand ();
1414 static final _securityService = SecurityService ();
15- static final _shell = Shell ();
1615
1716 static const tag = "[Windows Package]" ;
1817
@@ -23,6 +22,21 @@ class WindowsPackageCommand extends Command<String> {
2322 String get name => 'winpackage' ;
2423
2524 WindowsPackageCommand () {
25+ argParser.addOption (
26+ 'download' ,
27+ help: 'Downloads a package' ,
28+
29+ allowed: const [
30+ 'system-components-removal' ,
31+ 'defender-removal' ,
32+ 'ai-removal' ,
33+ ],
34+ );
35+ argParser.addOption (
36+ 'download-path' ,
37+ help: 'Custom download path for packages' ,
38+ defaultsTo: WinPackageService .cabPath,
39+ );
2640 argParser.addOption (
2741 'install' ,
2842 help: 'Install a package' ,
@@ -48,7 +62,12 @@ class WindowsPackageCommand extends Command<String> {
4862 final installOption = argResults? .option ('install' );
4963 final uninstallOption = argResults? .option ('uninstall' );
5064
51- if (installOption != null ) {
65+ final downloadOption = argResults? .option ('download' );
66+ final downloadPath = argResults? .option ('download-path' );
67+
68+ if (downloadOption != null ) {
69+ await _downloadPackage (downloadOption, downloadPath);
70+ } else if (installOption != null ) {
5271 await _installPackage (installOption);
5372 } else if (uninstallOption != null ) {
5473 await _uninstallPackage (getPackageType (uninstallOption));
@@ -71,6 +90,23 @@ class WindowsPackageCommand extends Command<String> {
7190 }
7291 }
7392
93+ Future <void > _downloadPackage (
94+ final String parameter,
95+ final String ? path,
96+ ) async {
97+ try {
98+ final mode = getPackageType (parameter);
99+ stdout.writeln ('$tag Downloading package: ${mode .packageName }' );
100+ final packagePath = await _winPackageService.downloadPackage (
101+ mode,
102+ path: path,
103+ );
104+ stdout.writeln (packagePath);
105+ } catch (e) {
106+ stderr.writeln ('$tag $e ' );
107+ }
108+ }
109+
74110 Future <void > _installPackage (final String parameter) async {
75111 try {
76112 final mode = getPackageType (parameter);
@@ -89,11 +125,11 @@ class WindowsPackageCommand extends Command<String> {
89125 if (mode == WinPackageType .aiRemoval) {
90126 WinRegistryService .hidePageVisibilitySettings ("aicomponents" );
91127 WinRegistryService .hidePageVisibilitySettings ("privacy-systemaimodels" );
92- await _shell. run (
93- 'PowerShell -EP Unrestricted -NonInteractive -NoLogo -NoP -C " Disable-WindowsOptionalFeature -Online -FeatureName Recall -NoRestart" ' ,
128+ await runPSCommand (
129+ 'Disable-WindowsOptionalFeature -Online -FeatureName Recall -NoRestart' ,
94130 );
95- await _shell. run (
96- 'PowerShell -EP Unrestricted -NonInteractive -NoLogo -NoP -C " Get-AppxPackage -AllUsers Microsoft.Copilot* | Remove-AppxPackage" ' ,
131+ await runPSCommand (
132+ 'Get-AppxPackage -AllUsers Microsoft.Copilot* | Remove-AppxPackage' ,
97133 );
98134 }
99135 } catch (e) {
@@ -111,8 +147,8 @@ class WindowsPackageCommand extends Command<String> {
111147 if (packageType == WinPackageType .aiRemoval) {
112148 WinRegistryService .unhidePageVisibilitySettings ("aicomponents" );
113149 WinRegistryService .unhidePageVisibilitySettings ("privacy-systemaimodels" );
114- await _shell. run (
115- 'PowerShell -EP Unrestricted -NonInteractive -NoLogo -NoP -C " Enable-WindowsOptionalFeature -Online -FeatureName Recall -NoRestart" ' ,
150+ await runPSCommand (
151+ 'Enable-WindowsOptionalFeature -Online -FeatureName Recall -NoRestart' ,
116152 );
117153 await _msStoreCommand.installPackage (
118154 id: "9nht9rb2f4hd" ,
0 commit comments