Установка рабочей и рабочей версии на один компьютер - PullRequest
1 голос
/ 16 июня 2020

У меня есть стабильная производственная версия программного обеспечения, которая всегда имеет номер версии «1.X.0». У нас нет тестовой среды, поэтому я создал версию для разработки с номером версии «1.XY» для тестирования. Я тестирую эту версию на производственном компьютере перед выпуском новой производственной версии (1.X + 1.0)

Это работает нормально, есть меры безопасности, чтобы они не перепутались. Я также создал автоматическое обновление c для обеих версий, используя

startInfo.Arguments = string.Format("/passive /norestart /i \"{0}\"  TARGETDIR=\"{1}\"", msiPath, installDirectory);

installDirectory отличается для производственной и разрабатываемой версии.

Проблема в следующем:

код обновления одинаков для обеих версий. Я не хочу переключаться между кодами обновления. Я также установил для RemovePreviousVersion значение false, потому что я не хочу, чтобы версия 1.X.0 удалялась при установке версии 1.XY. Возможно ли иметь версии 1.X.0 и 1.XY на одном компьютере в в то же время, и когда версия 1.X.0 будет обновлена ​​до версии 1.X + 1.0, будет удалена только 1.X.0? То же самое должно применяться к версии 1.XY.

Или есть лучший способ справиться с этим? Спасибо

Ответы [ 2 ]

0 голосов
/ 17 июня 2020

Я нашел решение для одновременной установки 2 или более разных версий одного и того же программного обеспечения и их автоматического обновления.

Сначала я нахожу версию, которую использую сейчас, с

var version = Assembly.GetExecutingAssembly().GetName().Version;

Затем я сравниваю это с версией файла .msi, который находится в папке обновления на сервере (есть папки производства и разработки). Если версия .msi выше установленной, начинается обновление.

Сначала я устанавливаю новое программное обеспечение в ту же папку, используя

startInfo.Arguments = string.Format("/passive /norestart /i \"{0}\"  TARGETDIR=\"{1}\"", path, installDirectory);
var process = System.Diagnostics.Process.Start(startInfo);
process.WaitForExit();

Затем я удаляю только ту версию, которую я открыл. Я нахожу код продукта этой версии c, используя приведенный ниже код (я нашел код в ответе Windows GUID или Application List и немного изменил его)

 private string GetProductCode(string programName, string version)
        {
            StringBuilder sbProductCode = new StringBuilder(39);
            int iIdx = 0;
            while (
                0 == MsiEnumProducts(iIdx++, sbProductCode))
            {
                Int32 productNameLen = 512;
                StringBuilder sbProductName = new StringBuilder(productNameLen);

                MsiGetProductInfo(sbProductCode.ToString(),
                    "ProductName", sbProductName, ref productNameLen);

                if (sbProductName.ToString().Contains(programName))
                {
                    Int32 installDirLen = 1024;
                    StringBuilder sbVersionString = new StringBuilder(installDirLen);

                    MsiGetProductInfo(sbProductCode.ToString(),
                        "VersionString", sbVersionString, ref installDirLen);

                    if (version.Contains(sbVersionString.ToString()))
                    {
                        return sbProductCode.ToString();
                    }
                }
            }

            return null;
        }

и запустите

startInfo.Arguments = string.Format("/passive /norestart /x \"{0}\"", productCode);
System.Diagnostics.Process.Start(startInfo);

В итоге осталось 2 установленных версии софта и обновилась только одна.

0 голосов
/ 16 июня 2020

Я настоятельно рекомендую использовать виртуальную машину для тестирования установки и обновлений программного обеспечения. Если у вас есть профессиональная или корпоративная версия windows, у вас уже есть доступ к HyperV. Это дает несколько преимуществ:

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...