Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > Перезагрузка по окончанию установки (SetupProject)


Автор: Hmm3 14.1.2010, 21:06
В MS VS 2008 создаю Setup Project. Как сделать так, чтобы установщик после окончания установки выдавал запрос на перезагрузку? (в духе "Требуется перегрузить компьютер. Вы хотите это сделать сейчас?")

Автор: Sfate 14.1.2010, 23:01
обычным  мессаджбоксом...
Код

            using System.Management;//подключаем
...
            string message = "Устновка прошла успешно.\nПерезагрузить компьютер сейчас?";
            string caption = "На финишной.";
            MessageBoxButtons buttons = MessageBoxButtons.YesNo;
            DialogResult result;

            result = MessageBox.Show(message, caption, buttons);

            if (result == System.Windows.Forms.DialogResult.Yes)
            {
                ManagementBaseObject outParams = null;
        ManagementClass os = new ManagementClass("Win32_OperatingSystem");
        os.Get();
        os.Scope.Options.EnablePrivileges = true;
        ManagementBaseObject inParams = os.GetMethodParameters("Win32Shutdown");
        {
            inParams["Flags"] = "2";
        //inParams["Flags"] = "0"; // log off
        //inParams["Flags"] = "1"; // shutdown
        //inParams["Flags"] = "2"; // reboot
        }
        foreach (ManagementObject mo in os.GetInstances())
            outParams = mo.InvokeMethod("Win32Shutdown", inParams, null);
            }
...

вот скромный пример;))

Автор: Hmm3 15.1.2010, 13:13
Цитата(Sfate @ 14.1.2010,  23:01)
обычным  мессаджбоксом...

А как добавить MessageBox в SetupProject? 
Или имеется в виду написать отдельно программу и запустить в конце установки?

Автор: Sfate 15.1.2010, 18:46
Цитата(Hmm3 @  15.1.2010,  13:13 Найти цитируемый пост)
А как добавить MessageBox в SetupProject? 
это была ирония?
вышеприведенный код, кроме строчки "using System.Management;" (его в самом начале кода smile), пихаешь после нажатия кнопки финиш в сетапнике... или как там у тебя...


Цитата(Hmm3 @  15.1.2010,  13:13 Найти цитируемый пост)
Или имеется в виду написать отдельно программу и запустить в конце установки?
ну... я думаю... это лишнее...

Автор: gambit 17.1.2010, 00:22
 smile что же ты такое написал, что требует перезагрузки???

Автор: vikrorpert 17.1.2010, 02:36
может просто месадж бокс показать и предложить вручную перегрузиться?

Автор: gambit 18.1.2010, 11:53
Цитата(vikrorpert @  17.1.2010,  02:36 Найти цитируемый пост)
может просто месадж бокс показать и предложить вручную перегрузиться? 

а может все программы так писать? Word - запускаешь, вылазиет message box - "Пишите на листочке".

Автор: Sfate 18.1.2010, 14:20
 smile gambit, что не так? большинство setup'ов выдают запрос на перезагрузку, чтобы учесть изменения в реестре...

Автор: Hmm3 18.1.2010, 18:37
Цитата(Sfate @ 15.1.2010,  18:46)
Цитата(Hmm3 @  15.1.2010,  13:13 Найти цитируемый пост)
А как добавить MessageBox в SetupProject? 
это была ирония?
вышеприведенный код, кроме строчки "using System.Management;" (его в самом начале кода smile), пихаешь после нажатия кнопки финиш в сетапнике... или как там у тебя...

Нет, не ирония. 

По порядку, что я делаю:

1) Создаю Setup Project в Microsoft Visual Studio 2008 (Other Project Types --> Setup Project).
2) Добавляю файлы (file system), custom actions и т.п.
3) Ну и последний вопрос стоит с перезагрузкой.
За связь с пользователем отвечает User Interface, но там можно только добавлять текст. 
Можно добавлять также различного рода диалоги, но тоже только текст. Как добавить код или выдать запрос я так и не понял. 

Если можно распишите по шагам.

Автор: gambit 18.1.2010, 21:39
Цитата(vikrorpert @  17.1.2010,  02:36 Найти цитируемый пост)
предложить вручную перегрузиться? 


Цитата(Sfate @  18.1.2010,  14:20 Найти цитируемый пост)
большинство setup'ов выдают запрос на перезагрузку

В одном случае спрашивается разрешение на перезагрузку, в другом предлагается перегрузиться, чувствуете разницу?

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

Автор: Heinzz 18.1.2010, 21:41
Цитата(Hmm3 @  18.1.2010,  18:37 Найти цитируемый пост)
 Как добавить код 

нужно создать свой инсталятор
http://msdn.microsoft.com/en-us/library/system.configuration.install.installer.aspx

Автор: Sfate 18.1.2010, 23:31
Цитата(gambit @  18.1.2010,  21:39 Найти цитируемый пост)
вот только зачем нужна перезагрузка по окончанию сетапа я никогда не понимаю. Я могу понять рестарт при установке драйверов, но начиная(а может и раньше) с хр и драйвера работают без перезагрузки.
работают но не всегда... точнее не все...
как я понимаю перезагрузка используется из-за "этики"... 
также отличить рядовому юзверю, требуется ли реально перезагрузка невозможно...
как говорится, издержки производства;))

Автор: Hmm3 26.1.2010, 13:24
Всем спасибо, все получилось. Правда немного странновато:
Создаю dll, в ней наследую class Installer (более подробно обо всем этом 
http://msug.vn.ua/blogs/akrakovetsky/archive/2009/07/20/asp-net-setup-project-microsoft-visual-studio-2005-2008.aspx), в классе уже подписываюсь на событие, а в обработчике события уже и вывожу запрос на перезагрузку. 
Просто была надежда, что все это решается маленькой галочкой где-нибудь в настройке проекта.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)