如何在ClickOnce场景中设置AppDomain FriendlyName?

时间:2011-06-16 19:09:06

标签: c# wpf clickonce

当使用ClickOnce而不是exe名称部署应用程序时,似乎将FriendlyName设置为“DefaultDomain”。我想将我的窗口与其他可能也是“DefaultDomain”的潜在ClickOnce应用消除歧义。

澄清:我们正在使用非托管电话,

[DllImport("user32.dll")]
public static extern int GetClassName(IntPtr hWnd, StringBuilder lpClassName, int nMaxCount);

检索用户桌面周围的窗口类名,并确保我们以某种方式响应我们的应用程序创建的窗口。当ClickOnce部署时,我们的窗口不再将exe名称作为域名,并且不会轻易区别于其他潜在的ClickOnce部署应用程序。

1 个答案:

答案 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

另一个想法是只使用反射来获取调用程序集名称,但这在所有部分信任环境中都不会很好。