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

tof*_*tim 6 c# wpf clickonce

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

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

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

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

J C*_*per 2

好问题。

我不能肯定地说为什么会出现这种情况,但我相信应用程序的“托管”方式可能有所不同,因为它是启动应用程序的“ClickOnce 应用程序部署支持库”。

但是,如果您强烈希望使用 AppDomain.FriendlyName 来区分您的应用程序,那么也许您可以自己创建应用程序域并定义您自己的友好名称。

达到相同目的的另一个想法是使用应用程序全名,如下所示:

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;
}
Run Code Online (Sandbox Code Playgroud)

我很快就创建了正则表达式,所以没有保证。以下是解释命名约定的链接:http://blogs.msdn.com/b/shawnfa/archive/2004/06/30/170241.aspx

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