2015-12-09 3 views
0

Я стажер в компании-разработчике программного обеспечения. У меня есть надстройка, запрограммированная в C# для SAP B1. В этом дополнении Я использую свою собственную функцию обновления по некоторым причинам (не могу использовать clickOnce из-за контрольных сумм в SAP). Эта функция обновления включена в основной класс. Все остальные новые функции, которые я программирую, создаются как файлы DLL.Обработка процессов в функции обновления C#

Только один файл dll с именем "...main_functions.dll" включен в приложение в начале. И все другие DLL-файлы могут быть добавлены внутри этого файла dll и загружены на ftp-сервер. Приложение загрузит новую версию этого файла «... main_functions.dll» с другими DLL-файлами и заменит старые файлы до того, как файлы будут используемые при запуске.

Проблема заключается в том, что после того, как эта надстройка будет запущена, она будет использоваться в том же терминале в офисах клиентов, что приведет к сбою надстройки из-за того, что приложение пытается заменить файл, который в настоящее время используется другим пользователем в терминале. Теперь я пытаюсь найти решение, например, если есть другие процессы, запущенные в терминале другими пользователями, остановить процесс обновления и отобразить сообщение типа «пожалуйста, закройте все другие экземпляры этого приложения до начала обновления!».

Если кто-то может дать мне некоторые идеи по его решению, мы высоко ценим.

+0

Я предполагаю, что часть C# состоит из серии Dll, одна из которых является точкой входа и что модуль SAP просто перехватывает основную функцию dll. Таким образом, вы должны иметь возможность развернуть часть C# отдельно от любой части SAP. Внедрите проект установщика в C# Solution, это должно позаботиться о проблемах, о которых вы говорите. Если вы не хотите «сворачивать свои собственные», есть много сторонних, таких как InstallShield. – bilpor

+0

@bilpor Проблема в том, что addOn зарегистрирован под SAP. Представьте себе это как часть его после его регистрации. Поэтому использование стороннего решения для обновления совершенно невозможно. – Isuru

ответ

0

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

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

+0

Привет, на самом деле это хорошая идея. У меня уже есть способ проверить, доступно ли обновление. У меня есть файл .txt на ftp-сервере, у которого есть новый номер версии. И каждый раз, когда приложение запускается, он сравнивает ver. с txt-файлом на локальном компьютере. Я попытаюсь использовать отдельный процесс для обновления, хотя я все еще не так хорош с ними :) Спасибо – Isuru

+0

Но если я использую sep. процесс обновления, независимо от процесса, все равно будут другие процессы, которые обращаются к файлам (другим пользователям). Не так ли? – Isuru

+0

Вам необходимо убедиться, что ни один процесс не получает доступ к любому из файлов, которые вы обновляете, когда вы выполняете обновление, иначе оно не удастся. – Russ

Смежные вопросы