У меня есть .exe блок и ряд блоков, на которые ссылаются, для которых я хотел бы иметь возможность развернуть обновленный код. Я не должен на самом деле изменять рабочий код, но в следующий раз, когда я запускаю исполняемый файл, я хотел бы, чтобы он взял обновленный код. В настоящее время, когда я пытаюсь скопировать по рабочему файлу, я получаю ошибку о .exe том, чтобы быть используемым другим процессом.
Подводить итог; как я могу обновить код, в то время как .exe используется?
XOR просто означает "отличаются ли эти два булевых значения?". Поэтому:
if (!!isEmptyString(firstStr) != !!isEmptyString(secondStr)) {
// ...
}
!!
s просто гарантируют, что оператор ! =
сравнивает два подлинных булевых значения, поскольку возможно isEmpicalString ()
возвращает что-то другое (например, null
для false или саму строку для true).
Большой con: DataSets огромны, поэтому сохранение всех их в памяти сервера является проблемой, особенно когда количество пользователей начинает расти.
-121--4690549-Это легко сделать. Файл можно переименовать, Windows блокирует дескриптор, а не запись каталога для файла. Теперь вы можете просто скопировать обновление без проблем. Осталось только избавиться от переименованного файла после повторного запуска приложения. При необходимости.
Вы не можете обновить сборку, когда она используется. Лучшим вариантом для такой ситуации является создание небольшого исполняемого файла, который делает теневую копию ваших сборок и запускает их из нового места.
Таким образом, когда пользователь запускает программу, вы можете сделать теневую копию (локально) с места развертывания, которую всегда можно перезаписать.
ClickOnce дает вам несколько вариантов. Существует стратегия обновления «обновление после запуска приложения»
Для более сложных сценариев существует пространство имен System.Deployment . Например, вы можете периодически опрашивать обновления вашего приложения.
Просто идея: попробуйте MEF и [Импорт [" http: // someRemoteResource "]]
А как насчет следующего:
Лучшей идеей будет один из других уже предложенных ответов... например, использование рекомпозиции с MEF и или ClickOnce. Однако эти решения не помогут вам для "этого развертывания". Они требуют внесения изменений в exe или создания загрузочного исполняемого файла, что поможет вам только при следующем развертывании.
Для этой установки вы можете попробовать сделать следующее (я никогда не делал этого раньше, но теоретически это может сработать):
Ключ RunOnce содержит команды командной строки, которые запускаются один раз при перезагрузке, а затем удаляются из реестра, чтобы они не запускались снова. Так InstallShield позволяет вам перезаписывать определенные dll, пока они используются другими приложениями.
Я не думаю, что это возможно. Например, при развертывании asp.net-приложений с нулевым временем простоя лучше всего использовать балансировщик нагрузки, чтобы можно было отключить один экземпляр, обновить его, а затем отключить другой для обновления.