none
Проблема с Service RRS feed

  • Общие обсуждения

  • Здравствуйте. Проблема такого плана. Есть некое приложение которое может автоматически обновляться. 

    Механизм такой:
    Программа скачивает обновления в папку Upd в своей директории, далее оно вызывает глобальное событие в своей службе(Service) которая закрывает текущий процесс. Служба копирует все файлы из папки Upd в текущую папку приложения и заменяет файлы, если такие имеются и заново запускает процесс программы. Ранее все работало замечательно, теперь же почему-то Служба не может скопировать файлы. Т.е все скачивается, служба убивает процесс, пытается скопировать файлы, но ничего не выходит. Скорее всего StartUpdate возвращает false.

    KillAppProcess();//Закрываем процесс
    Thread.Sleep(10000);//На всякий случай ждем
                            
    if (StartUpdate())
    {
         StartAppProcess();
    }
    
    .............................
    
    private bool StartUpdate()
    {
                
                try
                {
                    DirectoryInfo updateDir = new DirectoryInfo(Application.StartupPath+"\\Upd");
                    
                    foreach (FileInfo file in updateDir.GetFiles())
                    {
                        file.CopyTo(Application.StartupPath + "\\" + file.Name,true);
                    }
                    
                    updateDir.Delete(true);
                    
                    return true;
                }
                catch
                {
                    return false;
                }
    
    }

    Но что самое интересное! Если я скомпилирую сборку этой самой службы и положу ее в каталог с установленным приложением(заменив оригинал из дистрибутива), то все работает. Дело в том что при изначально приложение было написано на VS2008(и установлена у пользователей), а файлы обновлений уже на 2010. Суть в том, что если я скомпилирую exe-шник службы на 2010 и положу вручную в этот каталог и запущу процесс по новой, то все обновляется замечательно. Т.е StartUpdate возвращает true. Причем код службы тот же самый. Не строчки изменений! В чем может быть проблема? Я уже голову поломал! Помогите разобраться пожалуйста. Заранее ОГРОМНОЕ СПАСИБО за советы!

    10 октября 2013 г. 5:27

Все ответы

  • Здравствуйте,

    Похожие на Ваше решение не встречал, но относительный путь вроде правильно прописан, может с правами что-то. Могу лишь посоветовать пересмотреть сам метод:


    Если Вам помог чей-либо ответ, пожалуйста, не забывайте жать на кнопку "Предложить как ответ" или "Проголосовать за полезное сообщение" Мнения, высказанные здесь, являются отражение моих личных взглядов, а не позиции корпорации Microsoft. Вся информация предоставляется "как есть" без каких-либо гарантий.

    10 октября 2013 г. 7:53
    Модератор
  • Спасибо за ответ. Но не понятно почему только что скомпилированный из тех же исходников файл службы работает нормально, если его подменить перед обновлением в каталоге. Уже голову сломал.
    10 октября 2013 г. 9:09