Подтвердить что ты не робот

Программная регистрация программы в программе "Установка и удаление программ" и сохранение файлов в исполняемом файле

Я работаю над консольным приложением windows С#, которое я хочу разрешить пользователю устанавливать на свой компьютер.

Я хочу сделать свой собственный исполняемый файл Windows Installer в качестве инструментов развертывания установки, встроенных в Visual Studio, по-видимому, несколько не хватает функциональности для настроек и документации.

Поэтому, поскольку я хочу создать свой собственный установщик Windows, как зарегистрировать свою программу в окне "Установка и удаление программ", чтобы они могли снова удалить ее, если захотят, и она перезагрузит мою программу установки, чтобы выполнить удаление.

Кроме того, исполняемому файлу, очевидно, необходимо будет скопировать файлы в разные места на ПК, то есть C:\Program Files, так как я могу сохранить исполняемые файлы в исполняемом файле установщика Windows, чтобы я мог переместить их в нужное место.

Можно ли это сделать?

Спасибо за любую помощь, которую вы можете предоставить.

4b9b3361

Ответ 1

Здесь мы используем процедуру регистрации нашей программы в разделе "Установка и удаление программ":

private void CreateUninstaller()
{
    using (RegistryKey parent = Registry.LocalMachine.OpenSubKey(
                 @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall", true))
    {
        if (parent == null)
        {
            throw new Exception("Uninstall registry key not found.");
        }
        try
        {
            RegistryKey key = null;

            try
            {
                string guidText = UninstallGuid.ToString("B");
                key = parent.OpenSubKey(guidText, true) ??
                      parent.CreateSubKey(guidText);

                if (key == null)
                {
                    throw new Exception(String.Format("Unable to create uninstaller '{0}\\{1}'", UninstallRegKeyPath, guidText));
                }

                Assembly asm = GetType().Assembly;
                Version v = asm.GetName().Version;
                string exe = "\"" + asm.CodeBase.Substring(8).Replace("/", "\\\\") + "\"";

                key.SetValue("DisplayName", "My Program");
                key.SetValue("ApplicationVersion", v.ToString());
                key.SetValue("Publisher", "My Company");
                key.SetValue("DisplayIcon", exe);
                key.SetValue("DisplayVersion", v.ToString(2));
                key.SetValue("URLInfoAbout", "http://www.blinemedical.com");
                key.SetValue("Contact", "[email protected]");
                key.SetValue("InstallDate", DateTime.Now.ToString("yyyyMMdd"));
                key.SetValue("UninstallString", exe + " /uninstallprompt");
            }
            finally
            {
                if (key != null)
                {
                    key.Close();
                }
            }
        }
        catch (Exception ex)
        {
            throw new Exception(
                "An error occurred writing uninstall information to the registry.  The service is fully installed but can only be uninstalled manually through the command line.",
                ex);
        }
    }
}

Ответ 2

Не создавайте собственный установщик, используйте проверенный инструмент развертывания, например: NSIS, Inno Setup или WiX. Все они бесплатны и имеют множество функций.

Ответ 4

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

Ответ 5

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