当使用ClickOnce而不是exe名称部署应用程序时,似乎将FriendlyName设置为“DefaultDomain”。我想将我的窗口与其他可能也是“DefaultDomain”的潜在ClickOnce应用消除歧义。
澄清:我们正在使用非托管电话,
[DllImport("user32.dll")]
public static extern int GetClassName(IntPtr hWnd, StringBuilder lpClassName, int nMaxCount);
检索用户桌面周围的窗口类名,并确保我们以某种方式响应我们的应用程序创建的窗口。当ClickOnce部署时,我们的窗口不再将exe名称作为域名,并且不会轻易区别于其他潜在的ClickOnce部署应用程序。
答案 0 :(得分:2)
很棒的问题。
我不能确定为什么会出现这种情况,但我相信应用程序可能是“托管”的,因为它是启动应用程序的'ClickOnce应用程序部署支持库'。
但是,如果您有使用AppDomain.FriendlyName来区分应用程序的不懈愿望,那么您可以自己创建appdomain并定义自己的友好名称。
另一个用于同一目的的想法是使用应用程序全名,如下所示:
private static string GetAppName()
{
if (System.Deployment.Application.ApplicationDeployment.IsNetworkDeployed)
{
ApplicationDeployment curDeployment = ApplicationDeployment.CurrentDeployment;
string fullname = curDeployment.UpdatedApplicationFullName;
Match match = Regex.Match(fullname, "#.+/(?<app>.+).exe");
return match.Groups["app"].ToString();
}
return null;
}
我很快就创建了正则表达式,所以没有保证。以下是解释命名约定的链接:http://blogs.msdn.com/b/shawnfa/archive/2004/06/30/170241.aspx
另一个想法是只使用反射来获取调用程序集名称,但这在所有部分信任环境中都不会很好。