One issue I’ve encountered while building Metro-style WinRT apps on Windows 8 is the need to have my app interact with a WCF service running on the same machine.
This is obviously a common scenario for any n-tier or SOA app development. The challenge we face is that WinRT apps are blocked from calling back to localhost (127.0.0.1). The challenge and solution are described here:
http://msdn.microsoft.com/en-us/library/windows/apps/Hh780593.aspx
To find the real application name (moniker) necessary, I wrote a simple command line utility to read the registry:
using System; using Microsoft.Win32; namespace WinRtAppList { class Program { static void Main(string[] args) { var reg = Registry. CurrentUser.OpenSubKey("Software"). OpenSubKey("Classes"). OpenSubKey("Local Settings"). OpenSubKey("Software"). OpenSubKey("Microsoft"). OpenSubKey("Windows"). OpenSubKey("CurrentVersion"). OpenSubKey("AppContainer"). OpenSubKey("Mappings"); var items = reg.GetSubKeyNames(); string query = null; if (args.Length > 0) query = args[0].ToLower(); foreach (var item in items) { var app = reg.OpenSubKey(item); var displayName = app.GetValue("DisplayName").ToString(); if (string.IsNullOrEmpty(query) || displayName.ToLower().Contains(query)) { Console.WriteLine(app.GetValue("DisplayName")); Console.WriteLine(" SID: " + item); Console.WriteLine(" Moniker: " + app.GetValue("Moniker")); Console.WriteLine(); } } Console.ReadLine(); } } }
using System; using Microsoft.Win32;
namespace WinRtAppList { class Program { static void Main(string[] args) { var reg = Registry. CurrentUser.OpenSubKey("Software"). OpenSubKey("Classes"). OpenSubKey("Local Settings"). OpenSubKey("Software"). OpenSubKey("Microsoft"). OpenSubKey("Windows"). OpenSubKey("CurrentVersion"). OpenSubKey("AppContainer"). OpenSubKey("Mappings");
var items = reg.GetSubKeyNames(); string query = null; if (args.Length > 0) query = args[0].ToLower();
foreach (var item in items) { var app = reg.OpenSubKey(item); var displayName = app.GetValue("DisplayName").ToString(); if (string.IsNullOrEmpty(query) || displayName.ToLower().Contains(query)) { Console.WriteLine(app.GetValue("DisplayName")); Console.WriteLine(" SID: " + item); Console.WriteLine(" Moniker: " + app.GetValue("Moniker")); Console.WriteLine(); } }
Console.ReadLine(); } } }
Nothing fancy, but it helps avoid the need to dig around in the registry with regedit just to find the application moniker.
Powered by: newtelligence dasBlog 2.0.7226.0
Disclaimer The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.
© Copyright 2013, Marimer LLC
E-mail