2011-06-16 44 views
5

當使用ClickOnce部署應用程序而不是exe名稱時,似乎FriendlyName設置爲「DefaultDomain」。我想從其他可能也是「DefaultDomain」的潛在ClickOnce應用程序中消除我的窗口。如何在ClickOnce場景中設置AppDomain FriendlyName?

澄清:我們正在使用的非託管的呼叫,

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

檢索圍繞用戶的桌面窗口的類名,並且需要確保我們以某種方式被創建的窗口應對我們應用。當通過ClickOnce部署時,我們的Windows不再將exe名稱作爲域名,並且不易與其他潛在的ClickOnce部署應用程序區分開來。

+0

使用%a或從log4net的patternlayout的%appdomain的FYI也會返回這個可愛的defaultdomain字符串。 – BlackICE 2013-09-06 15:55:35

回答

1

很棒的問題。

我不能肯定地說爲什麼會出現這種情況,但我相信也許應用程序被「託管」,因爲它是啓動應用程序的「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

另一個想法是僅使用反射來獲取調用程序集名稱,但是在所有部分信任環境中這不會很好地工作。

+0

我應該澄清,該問題沒有從應用程序中獲取AppName,但我使用了一些非託管庫來確定從應用程序生成的窗口的窗口類,不幸的是,它們都表示DefaultDomain。 – tofutim 2011-06-17 14:28:29