Как обновить блок для выполнения c#, процесс (иначе горячий развертываются)?

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

Подводить итог; как я могу обновить код, в то время как .exe используется?

12
задан Michael Hale 25 February 2010 в 16:42
поделиться

7 ответов

XOR просто означает "отличаются ли эти два булевых значения?". Поэтому:

if (!!isEmptyString(firstStr) != !!isEmptyString(secondStr)) {
    // ...
}

!! s просто гарантируют, что оператор ! = сравнивает два подлинных булевых значения, поскольку возможно isEmpicalString () возвращает что-то другое (например, null для false или саму строку для true).

-121--1167699-

Большой con: DataSets огромны, поэтому сохранение всех их в памяти сервера является проблемой, особенно когда количество пользователей начинает расти.

-121--4690549-

Это легко сделать. Файл можно переименовать, Windows блокирует дескриптор, а не запись каталога для файла. Теперь вы можете просто скопировать обновление без проблем. Осталось только избавиться от переименованного файла после повторного запуска приложения. При необходимости.

18
ответ дан 2 December 2019 в 05:03
поделиться

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

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

2
ответ дан 2 December 2019 в 05:03
поделиться

ClickOnce дает вам несколько вариантов. Существует стратегия обновления «обновление после запуска приложения»

Для более сложных сценариев существует пространство имен System.Deployment . Например, вы можете периодически опрашивать обновления вашего приложения.

2
ответ дан 2 December 2019 в 05:03
поделиться

Просто идея: попробуйте MEF и [Импорт [" http: // someRemoteResource "]]

1
ответ дан 2 December 2019 в 05:03
поделиться

А как насчет следующего:

  1. Разверните exe в папку обновлений.
  2. Каждый раз, когда приложение запускается, оно проверяет папку обновлений.
  3. Если он не пустой, выполнить программу копирования
  4. Программа копирования затем заменит существующий исполняемый файл на тот, который находится в папке обновления
  5. Удалить что-нибудь в папке обновления
  6. Затем перезапустите exe
1
ответ дан 2 December 2019 в 05:03
поделиться

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

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

  1. Скопируйте ваши новые dll в какую-нибудь подпапку
  2. Добавьте команду командной строки xcopy к ключу реестра RunOnce, чтобы скопировать новую dll из подпапки в конечную папку exe, куда вы хотите ее поместить.
  3. Перезагрузитесь.

Ключ RunOnce содержит команды командной строки, которые запускаются один раз при перезагрузке, а затем удаляются из реестра, чтобы они не запускались снова. Так InstallShield позволяет вам перезаписывать определенные dll, пока они используются другими приложениями.

1
ответ дан 2 December 2019 в 05:03
поделиться

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

3
ответ дан 2 December 2019 в 05:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: