gpt4 book ai didi

c - 如何从带有通配符的字符串中获取Appx全名?

转载 作者:行者123 更新时间:2023-12-02 02:08:39 26 4
gpt4 key购买 nike

在 Powershell 中,此命令 Get-AppxPackage *name* 可以显示包的完整详细信息。是否可以使用任何 Windows API 来获得等效结果?

我见过这个question以及所有的详细信息 Package Query APIs 。但它们都需要完整的包名称或正在运行的包进程句柄。这些不适用于通配符字符串。

例如,如果我安装了此软件包 Microsoft.WindowsCalculator_8wekyb3d8bbwe,我可以使用 Get-AppxPackage *Calculator* 命令获取详细信息。任何 Windows API 都可以吗?我想避免 system()CreateProcess() 之类的事情。

最佳答案

感谢@f6a4的回答。我采取了相反的方式来实现我的目标。这是我的程序:

我找到一个answer在 Powershell 中查找 Get-AppxPackage cmdlet 后面的 DLL。使用此命令 (Get-Command Get-AppxPackage).dll,Powershell 将显示 DLL 文件路径,如下所示:

C:\Windows\Microsoft.Net\assembly\GAC_MSIL\Microsoft.Windows.Appx.PackageManager.Commands\v4.0_10.0.0.0__31bf3856ad364e35\Microsoft.Windows.Appx.PackageManager.Commands.dll

转到文件资源管理器中的该路径,然后在任何 .NET 反编译器中打开 Microsoft.Windows.Appx.PackageManager.Commands.dll 文件。这里我用了dnSpyGet-AppxManifest 命令部分包含以下 C# 代码:

protected override void ProcessRecord()
{
AppxPackage appxPackage = this.packageManager.FindPackage(this.Package);
if (appxPackage != null)
{
string str;
if (appxPackage.IsBundle)
{
str = "\\AppxMetadata\\AppxBundleManifest.xml";
}
else
{
str = "\\AppxManifest.xml";
}
using (FileStream fileStream = new FileStream(appxPackage.InstallLocation + str, FileMode.Open, FileAccess.Read))
{
using (XmlReader xmlReader = XmlReader.Create(fileStream, new XmlReaderSettings
{
DtdProcessing = DtdProcessing.Ignore
}))
{
XmlDocument xmlDocument = new XmlDocument();
xmlDocument.Load(xmlReader);
base.WriteObject(xmlDocument);
}
}
}
}

我使用 Windows API 将该代码转换为类似的 C 代码。这是代码片段:

ExpandEnvironmentStringsW(L"%ProgramFiles%\\WindowsApps", Buffer, MAX_PATH);

swprintf(FirstFile, MAX_PATH, L"%ls\\*", Buffer);

hFile = FindFirstFileW(FirstFile, &fileInfo);
if (hFile != INVALID_HANDLE_VALUE) {
do {
if (wcsstr(fileInfo.cFileName, AppxName) != 0) {
memcpy(PackageName, fileInfo.cFileName, MAX_PATH);
}
} while (FindNextFileW(hFile, &fileInfo) != 0);
}

关于c - 如何从带有通配符的字符串中获取Appx全名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50802129/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com