Почему установщик запускается после нажатия на ярлык?

Я создал простой загрузчик для своего приложения, используя WixSharp.

namespace TestBootstrapper
{
    class Program
    {
        static void Main()
        {
            var package = new MsiPackage("../testmsi.msi")
            {
                DisplayInternalUI = true,
                Id = "MyId",
                Compressed = true,
                Visible = true
            };

            var bootstrapper = new Bundle("MyTestInstaller", package)
            {
                Version = new Version("1.0.0.0"),
                UpgradeCode = new Guid("1FCC927B-7BB0-4FB0-B81E-2D87012E470B"),
                PreserveTempFiles = true,
                DisableModify = "yes",
                DisableRemove = true
            };

            bootstrapper.Build("Installer.exe");
        }
    }
}

Я вошел в систему как администратор и установил приложение (используя Installer.exe), и во время установки не было ошибок в средстве просмотра событий. Когда я нажал на ярлык, приложение работает как положено.

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

Я вошел как обычный пользователь и установил приложение (используя Installer.exe). Во время установки не было ошибок в средстве просмотра событий. Но когда я нажал ярлык установщик запускается снова.

Итак, почему установщик запускается и как предотвратить это поведение?

2 ответа

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

Предполагая, что вы выполнили установку для каждой машины, если вы установили (например) файл в папку "Данные приложения пользователя" из своего MSI, а затем вошли в систему как другой пользователь и запустили приложение, то этот файл явно отсутствует для этого пользователя., Поэтому установщик Windows выполнит установку для этой недостающей части приложения. Файл, вероятно, требуется для всех пользователей системы, да? Windows предполагает, что если вы устанавливаете файл (или запись в реестре) в папку профиля пользователя, то этот файл требуется всем, кто входит в систему, поэтому он устанавливается путем "восстановления", когда другой пользователь входит в систему и использует ярлык.

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

Я только что обнаружил кое-что, что может помочь...

Если вы не устанавливаете какие-либо программы в каталог приложений (например, устанавливаете только в данные локального приложения), установщик Windows выдает сообщение об ошибке, поскольку каталог приложений не существует.

Если вы добавите ЛЮБОЙ файл в каталог приложения или создадите его вручную, ярлык будет работать правильно.

Другие вопросы по тегам