Как мне установить AppDomain FriendlyName в сценарии ClickOnce? - PullRequest
6 голосов
/ 16 июня 2011

Кажется, что FriendlyName устанавливается в «DefaultDomain», когда приложение развертывается с использованием ClickOnce вместо имени exe. Я хотел бы отделить свои окна от других потенциальных приложений ClickOnce, которые также могут быть «DefaultDomain».

Уточнение: Мы используем неуправляемый вызов,

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

, чтобы получить имя класса окон вокруг рабочего стола пользователя, и нужно убедиться, что мы реагируем определенным образом на окна, созданные нашим приложением. При развертывании с помощью ClickOnce наши окна больше не несут имя exe в качестве домена и не будут легко отличаться от других потенциальных приложений, развернутых с помощью ClickOnce.

1 Ответ

2 голосов
/ 17 июня 2011

Отличный вопрос.

Я не могу точно сказать, почему это так, но я полагаю, что, возможно, приложение «размещается» иначе, поскольку именно «Библиотека поддержки развертывания приложений 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;
}

Я довольно быстро создал регулярное выражение, так что никаких гарантий. Вот ссылка, которая объясняет соглашения об именах: http://blogs.msdn.com/b/shawnfa/archive/2004/06/30/170241.aspx

Другой идеей было бы просто использовать отражение, чтобы получить имя вызывающей сборки, но это не будет работать так хорошо во всех средах с частичным доверием.

...