|
20 | 20 |
|
21 | 21 | namespace flutter {
|
22 | 22 |
|
23 |
| -Application::Application(const std::wstring_view package_name, |
24 |
| - const std::wstring_view package_family, |
25 |
| - const std::wstring_view package_full_name) |
26 |
| - : package_name_(package_name), |
27 |
| - package_family_(package_family), |
28 |
| - package_full_name_(package_full_name) {} |
29 |
| - |
30 |
| -int Application::Launch(const std::wstring_view args) { |
31 |
| - // Create the ApplicationActivationManager. |
32 |
| - winrt::com_ptr<IApplicationActivationManager> activation_manager; |
33 |
| - HRESULT hresult = ::CoCreateInstance( |
34 |
| - CLSID_ApplicationActivationManager, nullptr, CLSCTX_INPROC_SERVER, |
35 |
| - IID_IApplicationActivationManager, activation_manager.put_void()); |
36 |
| - if (FAILED(hresult)) { |
37 |
| - return -1; |
38 |
| - } |
39 |
| - |
40 |
| - // Launch the application. |
41 |
| - DWORD process_id; |
42 |
| - ACTIVATEOPTIONS options = AO_NONE; |
43 |
| - std::wstring app_user_model_id = package_family_ + L"!App"; |
44 |
| - hresult = activation_manager->ActivateApplication( |
45 |
| - app_user_model_id.data(), args.data(), options, &process_id); |
46 |
| - if (FAILED(hresult)) { |
47 |
| - return -1; |
48 |
| - } |
49 |
| - return process_id; |
50 |
| -} |
51 |
| - |
52 |
| -bool Application::Uninstall() { |
53 |
| - using winrt::Windows::Foundation::AsyncStatus; |
54 |
| - using winrt::Windows::Management::Deployment::PackageManager; |
55 |
| - using winrt::Windows::Management::Deployment::RemovalOptions; |
56 |
| - |
57 |
| - PackageManager package_manager; |
58 |
| - auto operation = package_manager.RemovePackageAsync( |
59 |
| - package_full_name_, RemovalOptions::RemoveForAllUsers); |
60 |
| - operation.get(); |
61 |
| - |
62 |
| - if (operation.Status() == AsyncStatus::Completed) { |
63 |
| - return true; |
64 |
| - } else if (operation.Status() == AsyncStatus::Canceled) { |
65 |
| - return false; |
66 |
| - } else if (operation.Status() == AsyncStatus::Error) { |
67 |
| - auto result = operation.GetResults(); |
68 |
| - std::wcerr << L"error: uninstall failed for package " << package_full_name_ |
69 |
| - << L" with error: " << result.ErrorText().c_str() << std::endl; |
70 |
| - return false; |
71 |
| - } |
72 |
| - return false; |
73 |
| -} |
74 |
| - |
75 | 23 | std::vector<Application> ApplicationStore::GetApps() const {
|
76 | 24 | using winrt::Windows::ApplicationModel::Package;
|
77 | 25 | using winrt::Windows::Management::Deployment::PackageManager;
|
@@ -112,7 +60,7 @@ std::vector<Application> ApplicationStore::GetApps(
|
112 | 60 | return apps;
|
113 | 61 | }
|
114 | 62 |
|
115 |
| -bool ApplicationStore::InstallApp( |
| 63 | +bool ApplicationStore::Install( |
116 | 64 | const std::wstring_view package_uri,
|
117 | 65 | const std::vector<std::wstring>& dependency_uris) {
|
118 | 66 | using winrt::Windows::Foundation::AsyncStatus;
|
@@ -145,4 +93,66 @@ bool ApplicationStore::InstallApp(
|
145 | 93 | return false;
|
146 | 94 | }
|
147 | 95 |
|
| 96 | +bool ApplicationStore::Uninstall(const std::wstring_view package_family) { |
| 97 | + bool success = true; |
| 98 | + for (const Application& app : GetApps(package_family)) { |
| 99 | + if (Uninstall(app.GetPackageFullName())) { |
| 100 | + std::wcerr << L"Uninstalled application " << app.GetPackageFullName() |
| 101 | + << std::endl; |
| 102 | + } else { |
| 103 | + std::wcerr << L"error: Failed to uninstall application " |
| 104 | + << app.GetPackageFullName() << std::endl; |
| 105 | + success = false; |
| 106 | + } |
| 107 | + } |
| 108 | + return success; |
| 109 | +} |
| 110 | + |
| 111 | +bool ApplicationStore::UninstallPackage( |
| 112 | + const std::wstring_view package_full_name) { |
| 113 | + using winrt::Windows::Foundation::AsyncStatus; |
| 114 | + using winrt::Windows::Management::Deployment::PackageManager; |
| 115 | + using winrt::Windows::Management::Deployment::RemovalOptions; |
| 116 | + |
| 117 | + PackageManager package_manager; |
| 118 | + auto operation = package_manager.RemovePackageAsync( |
| 119 | + package_full_name, RemovalOptions::RemoveForAllUsers); |
| 120 | + operation.get(); |
| 121 | + |
| 122 | + if (operation.Status() == AsyncStatus::Completed) { |
| 123 | + return true; |
| 124 | + } else if (operation.Status() == AsyncStatus::Canceled) { |
| 125 | + return false; |
| 126 | + } else if (operation.Status() == AsyncStatus::Error) { |
| 127 | + auto result = operation.GetResults(); |
| 128 | + std::wcerr << L"error: uninstall failed for package " << package_full_name |
| 129 | + << L" with error: " << result.ErrorText().c_str() << std::endl; |
| 130 | + return false; |
| 131 | + } |
| 132 | + return false; |
| 133 | +} |
| 134 | + |
| 135 | +int ApplicationStore::Launch(const std::wstring_view package_family, |
| 136 | + const std::wstring_view args) { |
| 137 | + // Create the ApplicationActivationManager. |
| 138 | + winrt::com_ptr<IApplicationActivationManager> activation_manager; |
| 139 | + HRESULT hresult = ::CoCreateInstance( |
| 140 | + CLSID_ApplicationActivationManager, nullptr, CLSCTX_INPROC_SERVER, |
| 141 | + IID_IApplicationActivationManager, activation_manager.put_void()); |
| 142 | + if (FAILED(hresult)) { |
| 143 | + return -1; |
| 144 | + } |
| 145 | + |
| 146 | + // Launch the application. |
| 147 | + DWORD process_id; |
| 148 | + ACTIVATEOPTIONS options = AO_NONE; |
| 149 | + std::wstring app_user_model_id = std::wstring(package_family) + L"!App"; |
| 150 | + hresult = activation_manager->ActivateApplication( |
| 151 | + app_user_model_id.data(), args.data(), options, &process_id); |
| 152 | + if (FAILED(hresult)) { |
| 153 | + return -1; |
| 154 | + } |
| 155 | + return process_id; |
| 156 | +} |
| 157 | + |
148 | 158 | } // namespace flutter
|
0 commit comments