2011-06-16 14 views
5

Parece que FriendlyName se establece en "DefaultDomain" cuando la aplicación se implementa utilizando ClickOnce en lugar del nombre del exe. Me gustaría eliminar la ambigüedad de mis ventanas de otras aplicaciones potenciales de ClickOnce que también pueden ser "DefaultDomain".¿Cómo configuro AppDomain FriendlyName en un escenario ClickOnce?

Aclaración: Estamos utilizando una llamada no administrado,

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

para recuperar el nombre de la clase de las ventanas de todo el escritorio del usuario, y la necesidad de asegurarse de que respondemos de una manera determinada a las ventanas creadas por nuestro solicitud. Cuando se implementa con ClickOnce, nuestras ventanas ya no llevan el nombre del ejecutable como dominio y no se distinguirán fácilmente de otras aplicaciones implementadas de ClickOnce.

+0

FYI utilizando% a o% appdomain del patrón de log4net, también devuelve esta encantadora cadena de dominio por defecto. – BlackICE

Respuesta

1

Gran pregunta.

No puedo decir con certeza por qué este es el caso, pero creo que tal vez la aplicación está "alojada" de manera diferente ya que es la 'Biblioteca de soporte de implementación de aplicaciones ClickOnce' que está lanzando la aplicación.

Sin embargo, si tiene un deseo implacable de utilizar AppDomain.FriendlyName para distinguir sus aplicaciones, entonces quizás podría crear el dominio de aplicación usted mismo y definir su propio nombre descriptivo.

Otra idea que serviría para el mismo propósito sería la de utilizar el nombre completo de aplicación de la siguiente manera:

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; 
} 

creé la expresión regular con bastante rapidez, por lo que no GARANTIAS. Aquí hay un enlace que explica las convenciones de nomenclatura: http://blogs.msdn.com/b/shawnfa/archive/2004/06/30/170241.aspx

Otra idea sería simplemente usar la reflexión para obtener el nombre del ensamblado que llama, pero esto no funcionará tan bien en todos los entornos de confianza parcial.

+0

Debo aclarar que el problema no es obtener AppName dentro de la aplicación, sino que utilicé algunas bibliotecas no administradas para determinar la clase de ventana de ventana generada desde la aplicación y, desafortunadamente, todas dicen DefaultDomain. – tofutim

Cuestiones relacionadas