Цитата: написали алгоритм
вот здесь дебри непроходимые... )) никогда ничего не писал с нуля, только по шаблону догонял )) я так понимаю, чтобы написать надо знать си плас плас, хотя бы 1 месяц штудируя книжку!
[more=из данной заготовки кит]
##1
##2
##
!define NAME "Winly-USB-installer"
!define DISTRO "Winly-USB-installer"
!define FILENAME "Winly-USB-installer"
!define VERSION "0.2"
!define MUI_ICON "pe.ico"
RequestExecutionLevel highest ;Установите права пользователей высокие
SetCompressor LZMA ;формат сжатия
CRCCheck On
XPStyle on ;Если хр системе адаптироваться к стилю XP
ShowInstDetails show
BrandingText "Winly-USB-installer?
CompletedText "Установка завершена, добро пожаловать к использованию и коллекции инструментов - Shendiao teasiu"
InstallButtonText "Создание "; переименован кнопку Далее, чтобы создать
Name "${NAME}-${VERSION}"
OutFile "${FILENAME}-${VERSION}.exe" ;Exe имя файла генерируется
!include "nsDialogs.nsh"
!include "MUI2.nsh"
!include "FileFunc.nsh"
!include "WordFunc.nsh" ;Список дисков
; Установите заголовок страницы
!define MUI_HEADERIMAGE
!define MUI_HEADERIMAGE_BITMAP "pe-logo.bmp"
!define MUI_HEADERIMAGE_BITMAP_NOSTRETCH
!define MUI_HEADERIMAGE_RIGHT ;Логотип значок отображается справа, а затем к левой СЛЕВА
; Определите переменные
Var DestDriveTxt
Var DestDrive
Var DestDisk
Var LabelDrivePageText
Var LabelDriveSelect
Var Format
Var FormatMe
Var Hddmode ;В этом примере я заменил режим Syslinux
Var Zipmode ;В этом примере я заменил режим grub4dos
Var HddmodeMe
Var ZipmodeMe
Var Warning
Var Soft
Var Link
Var Links
Var Image
Var hImage
Var Iso
Var ISOFileTxt
Var ISOSelection
Var TheISO
Var ISOTest
Var ISOFile
var BootDir
Page custom drivePage ;определяет
!define MUI_INSTFILESPAGE_COLORS "00FF00 000000"
; Instfiles page
!define MUI_TEXT_INSTALLING_TITLE $(Install_Title)
!define MUI_TEXT_INSTALLING_SUBTITLE $(Install_SubTitle)
!define MUI_TEXT_FINISH_SUBTITLE $(Install_Finish_Sucess)
!insertmacro MUI_PAGE_INSTFILES
; Language files
!insertmacro MUI_LANGUAGE "SimpChinese" ;поддержка руского
LangString DrivePage_Title ${LANG_SIMPCHINESE} "USB-диска для запуска программы установки."
LangString DrivePage_Title2 ${LANG_SIMPCHINESE} "Во-первых, вставить диск USB, а затем открыть программу."
LangString DrivePage_Text ${LANG_SIMPCHINESE} "Этот программа сделает ваш USB диск загрузочным."
LangString DrivePage_Input ${LANG_SIMPCHINESE} "Шаг 1: Кликните на выпадающем меню, чтобы выбрать USB диск."
LangString Soft_Text ${LANG_SIMPCHINESE} "Шаг 2: Выберите ваш ISO встроенный в режиме загрузки..."
LangString Iso_Text ${LANG_SIMPCHINESE} "Шаг 3: Выберите файл ISO образа."
LangString WarningPage_Text ${LANG_SIMPCHINESE} ""Примечание: Убедитесь, что данные скрытого раздела сохранены, устройство будет полностью перезаписано, исходные данные, не подлежат возмещению.!""
LangString Creation ${LANG_SIMPCHINESE} "Выполняется распаковка образа на диск, пожалуйста, подождите."
LangString Install_Title ${LANG_SIMPCHINESE} "установка ${DISTRO}"
LangString Install_SubTitle ${LANG_SIMPCHINESE} "Пожалуйста, подождите ${NAME} установка ${DISTRO} к $DestDisk"
LangString Install_Finish_Sucess ${LANG_SIMPCHINESE} "$\t ${NAME} Установка невозможна${DISTRO}к$DestDisk"
LangString IsoFile ${LANG_SIMPCHINESE} "ISO файл образа*.iso"
LangString Syslinux_Warning ${LANG_SIMPCHINESE} "ошибка ($R8) Происходит, когда установкаsyslinuxвремя.$\r$\nвашUSBПривод не будет загружаться..$\r$\nМы рекомендуем вам заменить диск или отформатировать, попробовать еще раз."
LangString grub4dos_Warning ${LANG_SIMPCHINESE} "ошибка ($R8) Происходит, когда установкаgrub4dosвремя.$\r$\nвашUSBПривод не будет загружаться..$\r$\nМы рекомендуем вам заменить диск или отформатировать, попробовать еще раз."
Function .onInit
InitPluginsDir
SetOutPath "$PLUGINSDIR" ;Будет настраиваться на всех ресурсов в начале временной папки напрямую перезвонить
File /r "src\*.*"
FunctionEnd
Function drivePage
!insertmacro MUI_HEADER_TEXT $(DrivePage_Title) $(DrivePage_Title2)
nsDialogs::Create 1018
${If} $DestDrive == ""
GetDlgItem $6 $HWNDPARENT 1 ; Система управления ручки к следующему шагу
EnableWindow $6 0 ; Закрыть кнопка Далее
${EndIf}
; Создание растрового BMP изображения
${NSD_CreateBitmap} 75% 0 20% 100% ""
Pop $Image
${NSD_SetImage} $Image $PLUGINSDIR\ad.bmp $hImage
${NSD_CreateLabel} 0 0 70% 30 $(DrivePage_Text)
Pop $LabelDrivePageText
${NSD_CreateLabel} 0 20 70% 15 $(DrivePage_Input)
Pop $LabelDriveSelect
SetCtlColors $LabelDriveSelect /Branding 0000BD ; Синий шрифт
;Создать выпадающее меню
${NSD_CreateDroplist} 0 40 30% 25 ""
Pop $DestDriveTxt
${NSD_OnChange} $DestDriveTxt db_select.onchange
${GetDrives} "FDD" driveList ;FDD сказал съемный диск, который отображает только диск U, HDD указывает, что жесткий диск отображается локально, ВСЕ показать все диски
${If} $DestDrive != ""
${NSD_CB_SelectString} $DestDriveTxt $DestDrive
${EndIf}
; Увеличение помощь или обновить веб-ссылки
${NSD_CreateLink} 85% 195 15% 14 "Обновление программного обеспечения".
Pop $Link
${NSD_OnClick} $Link onClickMyLink
; параметры форматирования
${NSD_CreateButton} 32% 38 38% 22 "(Необязательно) FAT32 формат этот диск"
Pop $Format
${NSD_OnClick} $Format FormatIt
; подпись
${NSD_CreateLabel} 0 70 70% 15 $(Soft_Text) ;Программное наполнение, кронштейны переведен обратно на русский
Pop $Soft
SetCtlColors $Soft /Branding 0000BD ;синий
${NSD_CreateLabel} 0 115 70% 15 $(Iso_Text) ;содержание
Pop $Iso
SetCtlColors $Iso /Branding 0000BD ;синий
${NSD_CreateText} 0 135 50% 20 "Обзор загружен *. выберете файл iso"
Pop $ISOFileTxt
${NSD_CreateBrowseButton} 53% 135 65 20 "Обзор"
Pop $ISOSelection
${NSD_OnClick} $ISOSelection ISOBrowse
; Параметры режима загрузки диска
${NSD_CreateCheckBox} 0 90 36% 15 "Режим запуска Syslinux."
Pop $Hddmode
${NSD_Check} $Hddmode ; по умолчанию
${NSD_OnClick} $Hddmode HddmodeIt
${NSD_CreateCheckBox} 38% 90 36% 15 "Режим запускаGrub4dos."
Pop $Zipmode
${NSD_OnClick} $Zipmode ZipmodeIt
; Предупредительные надписи
${NSD_CreateLabel} 0 190 80% 14 $(WarningPage_Text)
Pop $Warning
EnableWindow $Format 0 ;Закрыть Советы
EnableWindow $Hddmode 0
EnableWindow $Zipmode 0
EnableWindow $ISOFileTxt 0
EnableWindow $ISOSelection 0
ShowWindow $Warning 0
GetDlgItem $6 $HWNDPARENT 3
ShowWindow $6 0 ; назад
nsDialogs::Show
${NSD_FreeImage} $hImage ; Растровый выпуска
FunctionEnd
Function ISOBrowse
nsDialogs::SelectFileDialog open "$EXEDIR" $(IsoFile) ;Если программное обеспечение в той же директории, где файл ISO, автоматический выбор
Pop $TheISO
${NSD_SetText} $ISOFileTxt $TheISO
SetCtlColors $ISOFileTxt 009900 FFFFFF
StrCpy $ISOTest "$TheISO"
StrCpy $ISOFile "$TheISO" ; Выберите файл ISO, для того, чтобы извлечь сзади
${NSD_SetText} $Iso "Третий шаг завершен, ваш файл ISO образ выбран."
${NSD_CreateLabel} 0 165 75% 14 "Хорошо, вы можете нажать создать."
GetDlgItem $6 $HWNDPARENT 1 ; Система управления ручки к следующему шагу
EnableWindow $6 1 ; Нажмите Далее
FunctionEnd
Function onClickMyLink
Pop $Links ; Чтобы избежать ошибок,pop количественный
ExecShell "open" "http://www.ecoo168.com"
FunctionEnd
Function db_select.onchange
Pop $DestDriveTxt
${NSD_GetText} $DestDriveTxt $0
StrCpy $DestDrive "$0"
StrCpy $DestDisk "$DestDrive" -1
EnableWindow $Format 1 ;打开提示
EnableWindow $Hddmode 1
EnableWindow $Zipmode 1
EnableWindow $ISOFileTxt 1
EnableWindow $ISOSelection 1
ShowWindow $Warning 1
SetCtlColors $Warning /Branding FF0000
Call HddmodeIt
Call ZipmodeIt
FunctionEnd
;Уравнение список Письмо
Function driveList
;SendMessage $DestDriveTxt ${CB_ADDSTRING} 0 "STR:$9$R1$R6"
SendMessage $DestDriveTxt ${CB_ADDSTRING} 0 "STR:$9"
Push 1
FunctionEnd
Function HddmodeIt
${NSD_GetState} $Hddmode $HddmodeMe
${If} $HddmodeMe == ${BST_CHECKED}
${NSD_Check} $Hddmode
StrCpy $HddmodeMe "Да"
${NSD_SetText} $Hddmode "(Выберите) режим запуска Syslinux"
${NSD_Uncheck} $Zipmode
StrCpy $ZipmodeMe "Нет"
${NSD_SetText} $Zipmode "Режим запуска Grub4dos"
${ElseIf} $HddmodeMe == ${BST_UNCHECKED}
${NSD_Uncheck} $Hddmode
StrCpy $HddmodeMe "Нет"
${NSD_SetText} $Hddmode "Режим запуска Syslinux"
${NSD_Check} $Zipmode
StrCpy $ZipmodeMe "Да"
${NSD_SetText} $Zipmode "(Выберите) режим запуска Grub4dos"
${EndIf}
FunctionEnd
Function ZipmodeIt ; Set Format2 Option
${NSD_GetState} $Zipmode $ZipmodeMe
${If} $ZipmodeMe == ${BST_CHECKED}
${NSD_Check} $Zipmode
StrCpy $ZipmodeMe "Да"
${NSD_SetText} $Zipmode "(Выберите) режим запуска Grub4dos"
${NSD_Uncheck} $Hddmode
StrCpy $HddmodeMe "Нет"
${NSD_SetText} $Hddmode "Режим запуска Syslinux"
${ElseIf} $ZipmodeMe == ${BST_UNCHECKED}
${NSD_Uncheck} $Zipmode
StrCpy $ZipmodeMe "Нет"
${NSD_SetText} $Zipmode "Режим запуска Grub4dos"
${NSD_Check} $Hddmode
StrCpy $HddmodeMe "Да"
${NSD_SetText} $Hddmode "(Выберите) режим запуска Syslinux"
${EndIf}
FunctionEnd
Function FormatIt ; Параметры Форматирования
Pop $FormatMe
MessageBox MB_YESNO "Форматировать все пространство, - продолжить?" IDYES true IDNO false
true:
Goto next
false:
MessageBox MB_OK|MB_ICONSTOP "Не отформатирован, бросить"
Abort
next:
MessageBox MB_YESNO "Продолжить форматирование? (Пожалуйста, убедитесь, что данных на диске были сохранены, при форматирование данные стираются, U)" /SD IDYES IDNO false2
Goto next2
false2:
MessageBox MB_OK|MB_ICONSTOP "Не отформатирован, бросить"
Abort
next2: ;отформатирован команду DOS, подробные инструкции, С: представление и hd0, hd1 представление
nsExec::ExecToLog '"cmd" /c "echo y|$PLUGINSDIR\fbinst $DestDisk format --raw --force --fat32"'
MessageBox MB_OK "Форматирование завершено, восстановить все пространство U диска."
FunctionEnd
Function InstallEYes
SetShellVarContext all
StrCpy $R0 $DestDrive -1 ; 将盘符后面的'\'字符截去,表示为如D: 再定义为$R0
ClearErrors
${If} $HddmodeMe == "Да"
DetailPrint "Создание Syslinux на $ DestDisk, пожалуйста, подождите
ExecWait '$PLUGINSDIR\syslinux.exe -maf $R0' $R8 ; Это SYSLINUX командной строки DOS, пожалуйста, обратитесь к официальному описанию
DetailPrint "SyslinuxИнформация обнаруженное значение возврата Установка=$R8 , 0Указывает успех"
Banner::destroy
${If} $R8 != 0 ; Если возвращаемое значение не равно 0, то всплывающее окно с сообщением предупреждение
MessageBox MB_ICONEXCLAMATION|MB_OK $(Syslinux_Warning)
DetailPrint "Пожалуйста, попробуйте еще ??раз, или заменить диск."
${EndIf}
Call syscopyfile
${ElseIf} $ZipmodeMe == "Да"
DetailPrint "Создание Grub4dos на $ DestDisk, пожалуйста, подождите"
ExecWait '$PLUGINSDIR\BOOTICE.EXE /DEVICE=$R0 /mbr /install /type=grub4dos /auto' $R8 ; bootice Поддержка командной строки, есть много использования, обратитесь к должностному лицу
DetailPrint "Grub4dosИнформация обнаруженное значение возврата Установка=$R8 , 0Указывает успех"
Banner::destroy
${If} $R8 != 0 ; Если возвращаемое значение не равно 0, то всплывающее окно с сообщением предупреждение
MessageBox MB_ICONEXCLAMATION|MB_OK $(grub4dos_Warning)
DetailPrint "Пожалуйста, попробуйте еще ??раз, или заменить диск."
${EndIf}
Call grubcopyfile
${EndIf}
FunctionEnd
Function syscopyfile
${If} ${FileExists} "$BootDir\syslinux.cfg"
;Ничего не делать
${ElseIf} ${FileExists} "$BootDir\syslinux\syslinux.cfg"
;Ничего не делать
${ElseIf} ${FileExists} "$BootDir\boot\syslinux\syslinux.cfg"
;Ничего не делать
${ElseIf} ${FileExists} "$BootDir\boot\isolinux\isolinux.cfg"
Rename "$BootDir\boot\isolinux\" "$BootDir\boot\syslinux\"
Rename "$BootDir\boot\syslinux\isolinux.cfg" "$BootDir\boot\syslinux\syslinux.cfg"
${ElseIf} ${FileExists} "$BootDir\isolinux\isolinux.cfg"
Rename "$BootDir\isolinux\" "$BootDir\syslinux\"
Rename "$BootDir\syslinux\isolinux.cfg" "$BootDir\syslinux\syslinux.cfg"
${ElseIf} ${FileExists} "$BootDir\isolinux.cfg"
Rename "$BootDir\isolinux.cfg" "$BootDir\syslinux.cfg"
${Else} ; Вышеуказанные документы иногда нет
DetailPrint "Стандартный конфигурационный файл syslinux.cfg не найден Syslinux"
DetailPrint "Вы можете быть установлены вместо использования Syslinux загрузки ISO,"
DetailPrint "Или файл загрузки изменяется для других имен, которые я не могу идентифицировать,"
DetailPrint "请尝试其他启动方式或者手动寻找并编辑引导文件。"
${EndIf}
; Продолжить, чтобы обнаружить меню графического Syslinux, в целях достижения той же версии
${If} ${FileExists} "$BootDir\vesamenu.c32"
CopyFiles "$PLUGINSDIR\vesamenu.c32" "$BootDir\vesamenu.c32"
${ElseIf} ${FileExists} "$BootDir\syslinux\vesamenu.c32"
CopyFiles "$PLUGINSDIR\vesamenu.c32" "$BootDir\syslinux\vesamenu.c32"
${ElseIf} ${FileExists} "$BootDir\boot\syslinux\vesamenu.c32"
CopyFiles "$PLUGINSDIR\vesamenu.c32" "$BootDir\boot\syslinux\vesamenu.c32"
${EndIf}
FunctionEnd
Function grubcopyfile
;Если вы хотите скопировать файл в нем, пожалуйста, добавить соответствующий файл в пакете ресурсов, скопируйте следующую команду
# CopyFiles "$PLUGINSDIR\grldr" "$BootDir\grldr"
# CopyFiles "$PLUGINSDIR\menu.lst" "$BootDir\menu.lst"
${If} ${FileExists} "$BootDir\grldr"
${ElseIf} ${FileExists} "$BootDir\grub\grldr"
${ElseIf} ${FileExists} "$BootDir\boot\grub\grldr"
${ElseIf} ${FileExists} "$BootDir\grub.exe"
${ElseIf} ${FileExists} "$BootDir\boot\grub.exe"
${ElseIf} ${FileExists} "$BootDir\boot\grub\grub.exe"
${Else} ; Если любой из этих документов не являются, следующие советы
DetailPrint "Стандартный конфигурационный файл grldr grub4dos не найден"
DetailPrint "Вы не могли бы использовать Grub4dos руководство по установке ISO,"
DetailPrint "Или файл загрузки изменяется для других имен, которые я не могу идентифицировать,"
DetailPrint "请尝试其他启动方式或者手动寻找并编辑引导文件。"
${EndIf}
FunctionEnd
Section "Install" main
StrCpy $BootDir $DestDrive -1 ; 将盘符后面的'\'字符截去,表示为如D: 再定义为bootdir
StrCpy $BootDir "$BootDir"
DetailPrint $(Creation)
ExecWait '"$PLUGINSDIR\7zG.exe" x "$ISOFile" -o"$BootDir" -y -x![BOOT]*' ;встроенный 7z автоматически извлекать файл ISO-образ на диск
DetailPrint "Стандарты в настоящее время обнаружены и настроены файлы запуска, пожалуйста, подождите."
Call InstallEYes
SectionEnd
[/more]
для записи в скрытый раздел флехи, догнал только перевод и пару значений ))
Victor_VG, вы не могли бы сделать видео простого приложения портабле. чтобы было хотя бы наглядно что докумекивать под свои нужды.
мастер сценариев, требует указать язык, в окне настроек курсор не перевести