除下述方法外,是否有其他办法如通过guid等方式以管理员权限启动一个类Microsoft Store的应用程序?(安装包为msix后缀)

详述

  1. 该程序是Windows下使用C#开发的,项目地址:GitHub - DGP-Studio/Snap.Hutao: 实用的开源多功能原神工具箱 🧰 / Multifunctional Open-source Genshin Impact Toolkit 🧰 ,与Microsoft Store性质类似
  2. 该程序可通过 explorer.exe shell:::{4234d49b-0245-4df3-B780-3893943456e1} 查到,创建快捷方式到桌面以后详细信息显示的是奇怪的内容
  3. 不能直接通过 "C:\\Program Files\\WindowsApps\\60568DGPStudio.SnapHutao_1.10.4.0_x64__wbnnev551gwxy\\Snap.Hutao.exe" 直接启动该程序,除非使用System权限否则均提示权限不足
  4. 该程序目前的启动方式是cpp调用ShellExecuteEx函数,主体逻辑地址:Snap.Hutao.Elevated.Launcher/src/Snap.Hutao.Elevated.Launcher/Snap.Hutao.Elevated.Launcher.cpp at main · DGP-Studio/Snap.Hutao.Elevated.Launcher · GitHub

是否还有其他办法启动程序,除了创建快捷方式双击和ShellExecuteEx函数

使用com接口
参考代码

HRESULT LaunchApplication(LPCWSTR pPackageFullName, LPCWSTR pArguments, PDWORD pdwProcessId)
{
	IApplicationActivationManager* pAppActivationManager;
	HRESULT hr = E_INVALIDARG;
	hr = CoCreateInstance(CLSID_ApplicationActivationManager,
		NULL,
		CLSCTX_LOCAL_SERVER,
		IID_IApplicationActivationManager,
		(LPVOID*)&pAppActivationManager);
	if (!SUCCEEDED(hr)) return hr;
	hr = CoAllowSetForegroundWindow(pAppActivationManager, NULL);
	if (!SUCCEEDED(hr)) return hr;
	IShellItem* pShellItem;
	hr = SHCreateItemFromParsingName(pArguments, NULL, IID_PPV_ARGS(&pShellItem));
	IShellItemArray* pShellItemArray;
	hr = SHCreateShellItemArrayFromShellItem(pShellItem, IID_IShellItemArray, (void**)&pShellItemArray);
	hr = pAppActivationManager->ActivateForFile(pPackageFullName, pShellItemArray, L"", pdwProcessId);
	return hr;
}
1 个赞

哦仔细看了一下,不需要参数啊,那直接用ActivateApplication方法即可,它会继承当前线程的token,当前线程有特权就有特权,当前没有就没有