当使用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部署的应用程序.
好问题。
我不能肯定地说为什么会出现这种情况,但我相信应用程序的“托管”方式可能有所不同,因为它是启动应用程序的“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
另一个想法是仅使用反射来获取调用程序集名称,但这在所有部分信任环境中都不会很好地工作。