如何在ClickOnce场景中设置AppDomain FriendlyName

本文关键字:设置 AppDomain FriendlyName ClickOnce | 更新日期: 2023-09-27 17:59:25

当使用ClickOnce而不是exe名称部署应用程序时,FriendlyName似乎被设置为"DefaultDomain"。我想从其他可能也是"DefaultDomain"的ClickOnce应用程序中消除我的窗口的歧义。

澄清:我们正在使用非托管调用

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

检索用户桌面上windows的类名,并需要确保我们以某种方式对应用程序创建的windows做出响应。当ClickOnce部署时,我们的窗口不再以exe名称作为域,也不会轻易与其他可能部署的ClickOnce应用程序区分开来。

如何在ClickOnce场景中设置AppDomain FriendlyName

好问题。

我不能确定为什么会出现这种情况,但我相信应用程序的"托管"方式可能有所不同,因为启动应用程序的是"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

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