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