2015-06-24 1 views
1

Я почесываю голову в этом вопросе и провел некоторое время, изучая его. Каждый вопрос, который я рассматривал на основе этой проблемы, выглядит как отладка (у меня также есть эта проблема с отладкой). Однако это не причина этого.«Идентификация приложения не задана» с помощью ClickOnce

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

string copyPath = Environment.GetFolderPath(Environment.SpecialFolder.Startup) + "\\"; 
using (StreamWriter writer = new StreamWriter(copyPath + "\\" + "ZApp.url")) 
{ 
    string app = System.Reflection.Assembly.GetExecutingAssembly().Location; 
    writer.WriteLine("[InternetShortcut]"); 
    writer.WriteLine("URL=file:///" + app); 
    writer.WriteLine("IconIndex=0"); 
    string icon = app.Replace('\\', '/'); 
    writer.WriteLine("IconFile=" + icon); 
    writer.Flush(); 
} 

Этот код отлично работает. Однако всякий раз, когда приложение проверяет наличие обновления в фоновом режиме, оно выдает ошибку Application identity is not set.

Это код, который я использую для проверки обновления:

ApplicationDeployment deploy = ApplicationDeployment.CurrentDeployment; //<- Error thrown here 
UpdateCheckInfo update = deploy.CheckForDetailedUpdate(); 

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

+0

Не могли бы вы проверить, действительно ли 'ApplicationDeployment.IsNetworkDeployed' истинно, строка перед исключением выбрасывает? – Herdo

+0

возвращает false, когда мое приложение развернуто, оно доступно онлайн или офлайн – Andy

+0

Aha. Я понимаю вашу проблему. Но я не понимаю вашего подхода. С моей точки зрения вы используете ClickOnce для чего-то, для которого он не предназначен. Вы можете попытаться использовать mage [cmd line] MageUI для создания лучшего «ярлыка». пакет. –

ответ

2

Состояние развертывания является причиной ошибки. Как уже объясняется rudolf_franek, приложение не развертывается в сети. Применяя проверку перед обращением к CurrentDeployment сделает ваше приложение более безопасным:

if (ApplicationDeployment.IsNetworkDeployed) 
{ 
    // accessing the CurrentDeployment won't throw an exception 
    var deploy = ApplicationDeployment.CurrentDeployment; 
} 

Но чтобы решить эту проблему в результате чего ApplicationDeployment.IsNetworkDeployed ложные, вы должны смотреть на это MSDN forum post. tl; dr: Создание ярлыка, ссылающегося на файл * .exe, заставит приложение работать автономно.

Решение:
Вы должны создать правильный ярлык, где вы ссылаетесь на развертывание приложений манифеста (А.К.А. * .Application файл). Это должно сделать трюк.

+0

Я прав, полагая, что в файле манифеста вы ссылаетесь на файл, который находится в в той же папке, что и установка? – Andy

+1

Да, вы. Эта часть кажется мне ответом: «Вы должны создать надлежащий ярлык, где вы ссылаетесь на манифест развертывания приложения (файл a.k.a. * .application). Это должно сделать трюк». –

+0

@ Энди Да. Он развернут вместе с файлом * \ *. Exe *. – Herdo