- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我知道之前有人问过这个问题,我已经查看了 this similar 的答案问题。我试图获取我计算机上安装的所有 Metro 应用程序的显示名称,我想到了这个:
class Program {
[DllImport("shlwapi.dll", BestFitMapping = false, CharSet = CharSet.Unicode, ExactSpelling = true, SetLastError = false, ThrowOnUnmappableChar = true)]
public static extern int SHLoadIndirectString(string pszSource, StringBuilder pszOutBuf, int cchOutBuf, IntPtr ppvReserved);
static void Main(string[] args) {
foreach(string dir in Directory.GetDirectories(@"c:\program files\WindowsApps\")) {
if(File.Exists(dir + @"\AppxManifest.xml")) {
XmlDocument doc = new XmlDocument();
doc.Load(dir + @"\AppxManifest.xml");
string name = doc.GetElementsByTagName("DisplayName")[0].InnerText;
string identity = doc.GetElementsByTagName("Identity")[0].Attributes["Name"].Value;
if(!name.Contains("ms-resource")) {
Console.WriteLine(name);
} else {
StringBuilder sb = new StringBuilder();
int result = SHLoadIndirectString(
@"@{" + Path.GetFileName(dir) + "? ms-resource://" + Identity + "/resources/" + name.Split(':')[1] + "}",
sb, -1,
IntPtr.Zero);
if(result == 0) Console.WriteLine(sb.ToString());
}
}
}
Console.ReadLine();
}
}
这很好用,并为我提供了应用程序的名称,直到它到达文件夹 /microsoft.windowscommunicationsapps_17.4.9600.16384_x64__8wekyb3d8bbwe/
。 Visual Studio 不提供崩溃报告,它只是说“该程序已停止工作”。我查看了 xml 文件的结构,没有发现它应该崩溃的原因。
所以我的问题是:有没有什么方法可以修复崩溃,或者有没有更好的方法来获取 Metro 应用程序显示名称而不使用任何 Windows 8 特定功能?
谢谢!
最佳答案
我知道我要回答我自己的问题,但我已经做了很多研究并找到了我的问题的答案。这花了一些时间才找到,所以我也将展示我的解决方案并列出我了解到的关于 Metro 应用程序的其他一些事情。
start [ProtocolName]:
I modified my function to account for two apps being in a single package. I also filtered the list based on whether or not the app has a protocol name.
[DllImport("shlwapi.dll", BestFitMapping = false, CharSet = CharSet.Unicode, ExactSpelling = true, SetLastError = false, ThrowOnUnmappableChar = true)]
public static extern int SHLoadIndirectString(string pszSource, StringBuilder pszOutBuf, int cchOutBuf, IntPtr ppvReserved);
public static List<string> GetMetroAppnames() {
List<string> names = new List<string>();
foreach(string dir in Directory.GetDirectories(@"c:\program files\WindowsApps\")) {
if(System.IO.File.Exists(dir + @"\AppxManifest.xml")) {
XmlDocument doc = new XmlDocument();
doc.Load(dir + @"\AppxManifest.xml");
if(doc.GetElementsByTagName("Framework")[0] != null)
if(doc.GetElementsByTagName("Framework")[0].InnerText.ToLower() == "true")
continue;
if(doc.GetElementsByTagName("Protocol")[0] == null) continue;
string name = doc.GetElementsByTagName("DisplayName")[0].InnerText;
string identity = doc.GetElementsByTagName("Identity")[0].Attributes["Name"].Value;
string appName = "";
if(!name.Contains("ms-resource")) {
names.Add(name);
} else {
if(doc.GetElementsByTagName("Application").Count > 1) {
foreach(XmlElement elem in doc.GetElementsByTagName("Application")) {
name = elem.GetElementsByTagName("m2:VisualElements")[0].Attributes["DisplayName"].Value;
if(name.Contains("AppName")) name = name.Replace("AppName", "AppTitle");
appName = GetName(dir, name, identity);
if(appName != "") names.Add(appName);
}
}
appName = GetName(dir, name, identity);
if(appName != "") names.Add(appName);
}
}
}
return names.Distinct().ToList();
}
private static string GetName(string dir, string name, string identity) {
StringBuilder sb = new StringBuilder();
int result;
result = SHLoadIndirectString(
@"@{" + Path.GetFileName(dir) + "? ms-resource://" + identity + "/resources/" + name.Split(':')[1] + "}",
sb, -1,
IntPtr.Zero
);
if(result == 0) return sb.ToString();
return "";
}
代码似乎有点冗长,但这是我唯一能做到的。如果您稍后再看这个,那么我希望这能帮助您解决问题,但就目前而言,我已经了解了我需要的东西。
关于c# - 如何获取已安装的 Metro 应用程序的显示名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23331385/
有没有办法将 Dapper 包含在 Metro 应用程序中? 它依赖于 WinRT 中遗漏的 System.Data。 如果没有,是否有任何类似的框架可以使用? 最佳答案 Is there any w
我想为 Windows 8 Embedded Standard(发布预览版)创建一个自定义 shell(WinForms),允许用户运行、安装或更新应用程序(可以是桌面和/或 Metro 应用程序)。
我需要使用 c++ (WINRT/Metro) 在我的应用程序中生成唯一的临时文件名。如我所见,Win32 API GetTempFileName标记为仅在桌面上使用。 Metro 风格应用程序的等价
我想检索登录用户的用户名。是否可以?该应用程序仅用于内联网。 最佳答案 要将 Windows 身份验证添加到应用程序,请声明 'enterpriseAuthentication' capability
Metro UI 不支持多重绑定(bind)吗? 还是只是还没有添加? 最佳
我有公钥模数和公钥指数,我需要在 Metro 风格应用程序中生成公钥和加密数据。在 C# 中,我们有 RSAParameters 类,但我找不到任何适用于 Metro 风格应用程序的此类内容。 当我使
我从某人那里收到了一个项目,其中包括一个带有一些传感器和灯的 Arduino (Uno) 板,带有 USB 电缆以及用于通过 COM 端口与该板通信的文档化协议(protocol)。它适用于一些现有代
我正在尝试使用 Windbg 调试 C++ Metro 应用程序。由于 Windbg 在桌面上执行,应用程序在调试 session 5 秒后暂停,我必须切换回 Metro Desktop 以恢复应用程
任何人都可以建议我如何在 MahApps Metro 布局中实现图 block 的拖放。谢谢.. 最佳答案 我们使用 punker76 的另一个库取得了成功。 它轻量级且易于实现! GitHub ht
我想为我的 Android 应用程序设计 Metro 风格的 UI。怎么做?有什么捷径吗?我尝试使用 ImageView 制作一个。如何为其赋予效果?还有其他方法吗?请帮助我.... 最佳答案 试试
我看到 Metro 应用已更名为“Windows 8 应用”或“Windows 应用商店应用”。 是否有独立于通过其商店发布的工作流程的全屏应用程序风格的术语?你能构建一个可以直接安装的 Window
我正在开发一个应用程序,它将一些文件下载到本地存储进行缓存。在线文件有时位于 3 或 4 个嵌套文件夹中,我也想将此层次结构保留在我的缓存文件夹中。 除了 (await (await folder.G
我正在开发一个 Office 加载项,并想添加一个 WPF Mahapps Windows。 一切顺利,但我无法应用 Mahapps Windows 样式。 看教程here我看到我更新了 App.xa
我正在开发一个 Office 加载项,并想添加一个 WPF Mahapps Windows。 一切顺利,但我无法应用 Mahapps Windows 样式。 看教程here我看到我更新了 App.xa
如何获取Windows应用商店应用(Metro应用)中的唯一设备? 我们可以使用: Windows.System.Profile.HardwareIdentification.GetPackageSp
我正在执行 http GET 来获取数据,我正在使用 IXMLHTTPRequest2。 如果我 GET url "http://foo.com"(curl "http://foo.com") ,第二
我正在使用 Javascript 和 HTML 构建 Windows Metro 应用程序,但它崩溃了 HierarchyRequestError : Exception was thrown but
我正在创建一个简单的 metro 应用程序。我也在创建同一个应用的非 Metro 版本。 我面临的问题是 VS 不允许我将普通类库引用到 Metro 应用程序中,也不允许我将 Metro 类库引用到普
我正在尝试捆绑 markdown 文件而不产生太多开销(即不将它们手动添加到 Xcode 和 Android Studio 中的 Assets 包,不使用第 3 方依赖项)。 我的想法是允许 requ
能否在 Windows 8 上基于 C# XAML 的 Metro 应用程序中嵌入 IE Web 浏览器控件?另外,这样做时 HTML/Javascript 是否可以拥有 Windows 8 HTML
我是一名优秀的程序员,十分优秀!