Files
PowerToys/tools/BugReportTool/BugReportTool/Package.cpp
Stefan Markovic e637902892 [PowerRename][ImageResizer] Tier1 Win11 Context menu (#19000)
* Test win11 tier1 context menu

* Try to test signing

* Cleanup

* Cleanup project file

* Sign dll
Add PowerToys preffix
Add assets to installer

* expect.txt

* Switch to named pipes
Unregister package on uninstall
Remove unneeded files
Cleanup

* Bring back check if package registered but use per-user method

* Fix win11 check

* expect.txt

* Check if package already registered

* Revert "Check if package already registered"

FindPackages() method needs admin privileges.

This reverts commit 5af584fed4.

* Fix PowerRename args checking

* Cleanup assets

* Tier1 context menu ImageResizer
Minor cleanups
Move logic to package.h

* [WIP] Signing and installer
Expect.txt

* Localized context menu title

* Retarget everything 10.0.18362.0 -> 10.0.19041.0

* Address PR comments
 - check if selection renamable
 - minor cleanup
 - struct initialization

* Fix ImageResizerLib project configuration

* More Windows version updates

* Remove unneeded file & try fix resource build error

* Add Microsoft.PowerToys prefix to packages

* Test

* Fix convert-resx-to-rc.ps1 script issue causing resource files compile error

Don't generate empty STRINGTABLE for resx files without data

* Avoid duplicate context menu items

* [BugReportTool] Report installed context menu packages
2022-06-30 22:10:14 +02:00

79 lines
2.6 KiB
C++

#include "Package.h"
#include <Windows.h>
#include <filesystem>
#include <optional>
#include <fstream>
#include <sstream>
#include <string>
#include <winrt/Windows.Foundation.Collections.h>
#include <winrt/Windows.ApplicationModel.h>
#include <winrt/Windows.Foundation.h>
#include <winrt/Windows.Management.Deployment.h>
std::optional<winrt::Windows::ApplicationModel::Package> GetPackage(std::wstring packageDisplayName)
{
using namespace winrt::Windows::Foundation;
using namespace winrt::Windows::Management::Deployment;
PackageManager packageManager;
for (auto const& package : packageManager.FindPackagesForUser({}))
{
const auto& packageFullName = std::wstring{ package.Id().FullName() };
if (packageFullName.contains(packageDisplayName))
{
return { package };
}
}
return std::nullopt;
}
std::wstringstream GetPackageInfo(winrt::Windows::ApplicationModel::Package package) {
std::wstringstream packageInfo;
packageInfo << L"Display name: " << std::wstring(package.DisplayName()) << std::endl;
packageInfo << L"Full name: " << std::wstring(package.Id().FullName()) << std::endl;
packageInfo << L"Version: " << package.Id().Version().Major << L"."
<< package.Id().Version().Minor << L"."
<< package.Id().Version().Build << L"."
<< package.Id().Version().Revision << L"." << std::endl;
packageInfo << L"Publisher: " << std::wstring(package.Id().Publisher()) << std::endl;
packageInfo << L"Status: " << (package.Status().VerifyIsOK() ? std::wstring(L"OK") : std::wstring(L"Not OK")) << std::endl;
return packageInfo;
}
void ReportInstalledContextMenuPackages(const std::filesystem::path& reportDir)
{
const wchar_t* ImageResizerContextMenuPackageDisplayName = L"ImageResizerContextMenu";
const wchar_t* PowerRenameContextMenuPackageDisplayName = L"PowerRenameContextMenu";
auto reportPath = reportDir;
reportPath.append("context-menu-packages.txt");
std::wofstream packagesReport(reportPath);
try
{
auto imageResizerPackage = GetPackage(ImageResizerContextMenuPackageDisplayName);
if (imageResizerPackage)
{
packagesReport << GetPackageInfo(*imageResizerPackage).str() << std::endl;
}
auto powerRenamePackage = GetPackage(PowerRenameContextMenuPackageDisplayName);
if (powerRenamePackage)
{
packagesReport << GetPackageInfo(*powerRenamePackage).str() << std::endl;
}
}
catch (...)
{
printf("Failed to report installed context menu packages");
}
}