Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » SFX Creator 4 Alpha - создаём SFX архивы

Ответить
Настройки темы
SFX Creator 4 Alpha - создаём SFX архивы

Аватара для K.A.V.

Ленивый кусок мяса


Contributor


Сообщения: 1986
Благодарности: 723


Конфигурация

Профиль | Сайт | Отправить PM | Цитировать


Изменения
Автор: K.A.V.
Дата: 15-06-2020
Описание: Сборка #3 (фикс ошибки невозможности запуска)
Вложения
Тип файла: zip SFXCreator4Alpha_Build3.zip
(2.73 Mb, 577 просмотров)
Тип файла: zip build_3.zip
(812.3 Kb, 292 просмотров)
SFX Creator 4 Alpha
Обновление с любых прошлых версий не поддерживается! Производите чистую установку
Официальный сайт: http://kav-soft.ru/

Прочтите, перед тем как писать в эту тему

Если у вас возникли сложности при работе с SFX Creator, то пожалуйста, будьте добры, убедитесь, что вы проделали всё нижеописанное:
1. В главном окне программы нажмите на кнопку с красным значком вопроса и ознакомьтесь с файлом справки
2. Убедитесь, что используете последнюю версию SFX Creator
3. Не обсуждается работа ранних версий SFX Creator

Если у вас по прежнему возникают сложности - пишите в эту тему

О программе
Программа SFX Creator предназначена для создания SFX архивов, а также программа может быть использована для создания простых пакетов инсталляций с графическим интерфейсом и выбором устанавливаемых компонентов.
Основные возможности программы
Их много
  • Возможность создания как полностью silent (скрытых) SFX архивов, так и простых пакетов инсталляторов с графическим интерфейсом
  • Возможность показать настроенный баннер прогресса распаковки файлов
  • Возможность показать ваше изображение перед запуском процесса распаковки файлов
  • Возможность самоудаления архива после распаковки ваших файлов
  • Возможность создать программу удаления (с добавлением пункта в апплет "Установка и удаление программ")
  • Возможность закрыть приложения по точному/части имени окна, по классу окна, по образу процесса
  • Возможность ожидания запущенных приложений
  • Возможность проверки операционной системы
  • Поддержка большинства переменных системных/пользовательских директорий
  • Поддержка перезагрузки компьютера (по запросу или принудительно)
  • Создание ярлыков для файлов
  • Импорт REG-файлов после распаковки файлов
  • Выполнение приложений
  • Выполнение операций в реестре (запись/удаление параметров, удаление разделов)
  • Выполнение файловых операций (копирование/удаление файлов, создание/удаление директорий)
  • Возможность установить свою иконку на выходной файл
  • Возможность добавить информацию о версии файла
  • Возможность выполнить собственные функции, написанные на языке NSIS
  • Возможность распаковать ваши файлы в каталог, который указан в каком-либо ключе реестра
  • Регистрация библиотек при распаковке файлов (и возможность отменить регистрацию при удалении приложения)
  • Возможность при запуске/завершении показать пользователю информационное сообщение
  • Вы можете создавать пакет инсталлятора с графическим интерфейсом с возможностью выбора внешнего вида интерфейса: Modern UI или Ultra Modern UI, при выборе Ultra Modern UI вы также можете выбрать скин для интерфейса
  • При создании проекта с графическим интерфейсом, вы можете добавить отображение изображения на задний план
  • При создании проекта с графическим интерфейсом, вы можете создавать свои группы с компонентами и связывать исполнение команд с вашими компонентами
  • И многое другое!



Загрузка:

-------
[Справочник по командам Windows] -- [Справочник по NSIS] -- [SFX Creator - для создания SFX архивов]

Это сообщение посчитали полезным следующие участники:
Показать/скрыть список поблагодаривших

Отправлено: 03:13, 29-09-2009

 

Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата MKN:
для начала, сделать хотя бы только утилитку для извлечения ProductCode из MSI файла »
MKN, попробуйте такое (без обработки ошибок, VBScript):
Код: Выделить весь код
Option Explicit

Const msiOpenDatabaseModeReadOnly = 0

Dim strPath2MSIFile
Dim strProductCode


strPath2MSIFile = "C:\Program Files\Windows Installer 4.5 SDK\TOOLS\orca.msi"

With WScript.CreateObject("WindowsInstaller.Installer")
	With .OpenDatabase(strPath2MSIFile, msiOpenDatabaseModeReadOnly)
		With .OpenView("SELECT * FROM Property WHERE Property = 'ProductCode'")
			.Execute()
			
			With .Fetch()
				strProductCode = .StringData(2)
				WScript.Echo strProductCode
			End With
		End With
	End With
End With

WScript.Quit 0
Цитата:
Код: Выделить весь код
{4F34C602-4D6D-470D-A2A0-59E4F25DDBF2}

Последний раз редактировалось Iska, 25-05-2011 в 18:56.

Это сообщение посчитали полезным следующие участники:

Отправлено: 18:47, 25-05-2011 | #141



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для kotkovets

Ветеран


Сообщения: 1216
Благодарности: 486

Профиль | Отправить PM | Цитировать


Цитата MKN:
громоздко с помощью макроса опубликованного kotkovets и включенного в справочник »
есть пример куда проще определять:
читать дальше »
Код: Выделить весь код
OutFile "GetMSI.exe"

!define GetMSIProduct `!insertmacro _GetMSIProduct`
!macro _GetMSIProduct VAR ProductCode
   System::Call 'msi::MsiQueryProductStateA(t "${ProductCode}") i.s'
   Pop ${VAR}
!macroend

Section MSIProduct
  ${GetMSIProduct} $0 "{837b34e3-7c30-493c-8f6a-2b0f04e2912c}" ;на примере VC++ 2005 SP1
  StrCmp $0 5 0 +2
  MessageBox MB_ICONINFORMATION|MB_OK "$$0 = $0$\nЭтот продукт установлен!" IDOK
  StrCmp $0 `-1` 0 +2
  MessageBox MB_ICONINFORMATION|MB_OK "$$0 = $0$\nЭтот продукт не установлен!" IDOK
  StrCmp $0 `-2` 0 +2
  MessageBox MB_ICONINFORMATION|MB_OK "$$0 = $0$\nОшибка в ProductCode!" IDOK
SectionEnd

Цитата MKN:
Это было бы действительно весьма полезно... (для начала, сделать хотя бы только утилитку для извлечения ProductCode из MSI файла) »
C этим соглашусь на 100%, даже лучше свою функцию написать и зашить внутрь SFX или виде библиотеки с базой основных кодов продуктов msi: Microsoft .NET Framework, Microsoft Visual C++, MSXML, Java(TM).

-------
Спасибо ВСЕМ за то, что тратите свое время, что бы ПОМОЧЬ МНЕ.

Это сообщение посчитали полезным следующие участники:

Отправлено: 00:45, 26-05-2011 | #142

MKN MKN вне форума

Ветеран


Сообщения: 2355
Благодарности: 557

Профиль | Отправить PM | Цитировать


Цитата Iska:
попробуйте такое (без обработки ошибок, VBScript) »
А нельзя ли организовать скрипт так, чтобы он обрабатывал находящийся рядом с ним .MSI файл ?
Чтобы не прописывать ничего в самом скрипте (иначе какая уж тут автоматизация...)

Отправлено: 10:05, 26-05-2011 | #143


Аватара для K.A.V.

Ленивый кусок мяса


Contributor


Сообщения: 1986
Благодарности: 723

Профиль | Сайт | Отправить PM | Цитировать


Цитата Iska:
WScript.Echo strProductCode »
я так понимаю, что здесь выскакивает MesssageBox? Было бы неплохо скидывать значение в файл в любой форме (либо значение в первой строке текстового файла, либо конструкцией INI файла)

-------
[Справочник по командам Windows] -- [Справочник по NSIS] -- [SFX Creator - для создания SFX архивов]


Отправлено: 10:26, 26-05-2011 | #144

MKN MKN вне форума

Ветеран


Сообщения: 2355
Благодарности: 557

Профиль | Отправить PM | Цитировать


Вот такой скрипт нашёл (экспортирует всё из Property в xls файл ... Но наверное какую то малость можно подправить для ProductCode :
Код: Выделить весь код
' Export File Table from a given MSI Database to an Excel Spreadsheet 

Option Explicit 

Const msiOpenDatabaseModeReadOnly = 0 


On Error Resume Next 
Dim installer : Set installer = Nothing 
Dim szMSI 

szMSI = InputBox("Enter MSI File (including full path)", "Select MSI", "") 
DIM folder : folder = InputBox("Enter Folder to Write Table to...", "Select Export Folder","") 

Set installer = Wscript.CreateObject("WindowsInstaller.Installer") : CheckError 

Dim database : Set database = installer.OpenDatabase(szMSI, msiOpenDatabaseModeReadOnly) : CheckError 

Dim table, view, record 

table = "Property"

Set view = database.OpenView("SELECT 'Name' FROM _Tables") 
view.Execute : CheckError 
Do 
Set record = view.Fetch : CheckError 
If record Is Nothing Then Exit Do 
Export table, folder : CheckError 
Loop 
Set view = Nothing 


Export table, folder : CheckError 


Wscript.Quit(0) 

Sub Export(table, folder) 
Dim file :file = table & ".xls" 
database.Export table, folder, file 
End Sub 


Sub CheckError 
Dim message, errRec 
If Err = 0 Then Exit Sub 
message = Err.Source & " " & Hex(Err) & ": " & Err.Description 
If Not installer Is Nothing Then 
Set errRec = installer.LastErrorRecord 
If Not errRec Is Nothing Then message = message & vbNewLine & errRec.FormatText 
End If 
Wscript.Echo message 
Wscript.Quit 2 
End Sub
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:16, 26-05-2011 | #145


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Лирическое отступление.
читать дальше »
Я пользую файловый менеджер «Far Manager», посему: я работаю с командной строкой Far Manager'а, у меня стандартным хостом WSH назначен консольный «cscript.exe» (вместо «wscript.exe»), я пользую полные пути к скриптам вместо того, чтобы плодить скрипты по папкам.

Так делаю я. У Вас, MKN, K.A.V., я понимаю, процесс работы организован несколько иначе. Скрипт из #141 я выложил, чтобы Вы могли оценить, работает ли вообще сие, и гож ли подобный подход для Вас. Стало быть, я попробую написать по Вашим предпочтениям, но Вы должны мне разъяснить, почему нужно именно так, а не иначе. Хорошо?

Насколько я понимаю, Far Manager'ом никто из Вас не пользуется (или он не является основным Вашим файловым менеджером), так?

Почему я сие хочу выяснить: дело в том, что в его командной строке очень легко, быстро и удобно указывать путь к WSH-скрипту, лежащему в папке A, как параметр скрипта — путь к некоему msi-файлу, лежащему в папке B, результат работы скрипта перенаправить в некий файл в папке C. Ну, а находиться (иметь текущим каталогом) при этом можно вообще некую папку D . Например:
Код: Выделить весь код
cscript.exe "C:\Program Files\My Scripts\GetProductCodeFromMSI.vbs" "C:\Program Files\Windows Installer 4.5 SDK\TOOLS\orca.msi" 1>"E:\Песочница\0056\ProductCode.txt"
Или, например, просто получить «ProductCode» в редактор:
Код: Выделить весь код
edit:< cscript.exe "C:\Program Files\My Scripts\GetProductCodeFromMSI.vbs" "C:\Program Files\Windows Installer 4.5 SDK\TOOLS\orca.msi"
Впрочем, сие есть моё видение, но буду признателен Вам, если Вы опишете, как работаете Вы, как предполагаете (и хотели бы) использовать скрипт в Вашей работе. Может быть, Вам нужно его вызывать из редактора, где Вы пишете скрипты NSIS. А пока…


Цитата MKN:
А нельзя ли организовать скрипт так, чтобы он обрабатывал находящийся рядом с ним .MSI файл ? »
Можно. Например, так будут обрабатываться все MSI-файлы, находящиеся рядом с файлом скрипта:
Код: Выделить весь код
Option Explicit

Const msiOpenDatabaseModeReadOnly = 0

Dim objFSO
Dim objFile

Dim strProductCode


Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

For Each objFile In objFSO.GetFolder(objFSO.GetParentFolderName(WScript.ScriptFullName)).Files
	If UCase(objFSO.GetExtensionName(objFile.Name)) = UCase("msi") Then
		With WScript.CreateObject("WindowsInstaller.Installer")
			With .OpenDatabase(objFile.Path, msiOpenDatabaseModeReadOnly)
				With .OpenView("SELECT * FROM Property WHERE Property = 'ProductCode'")
					.Execute()
					
					With .Fetch()
						strProductCode = .StringData(2)
						WScript.Echo strProductCode
					End With
				End With
			End With
		End With
	End If
Next

WScript.Quit 0
Цитата K.A.V.:
я так понимаю, что здесь выскакивает MesssageBox? Было бы неплохо скидывать значение в файл в любой форме (либо значение в первой строке текстового файла, »
1. Использовать хост «cscript.exe» и перенаправлять вывод в нужный файл.
2. Прямой вывод в текстовый файл из скрипта. Вопрос — в какой именно: где задать его имя, где он будет находиться.
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:53, 26-05-2011 | #146

MKN MKN вне форума

Ветеран


Сообщения: 2355
Благодарности: 557

Профиль | Отправить PM | Цитировать


Iska,
Задача (в моём понимании) на данном частном отрезке "проекта SFX Creator" такова :

получить (экспортировать) из msi файла его ProductCode (и ещё ProductName), которые будут использоваться (записаны) в коде NSIS скрипта. Экспорт произвести в обыкновенный одноимённый txt файл. Например, в ProductCode.txt и ProductName.txt

О местонахождении : думаю, что лучшее местонахождение в процессе подготовки и работы, и msi файлов и результирующих файлов ProductCode.txt и ProductName.txt - это $TEMP. Но это для проекта.

Для работы же, предложенного тобой vbs скрипта, местонахождение и исходного *.msi и результирующего txt файлов - рядом со скриптом vbs.

PS DrWEB c ума сходит от этого скрипта и не даёт сохранять... Что делать ?

Последний раз редактировалось MKN, 27-05-2011 в 12:02.


Отправлено: 09:18, 27-05-2011 | #147

MKN MKN вне форума

Ветеран


Сообщения: 2355
Благодарности: 557

Профиль | Отправить PM | Цитировать


Если рассматривать эту часть проекта , как отдельную утилиту формирования NSIS кода для MSI установки, то происходить будет следующее :

Но сначала ещё немного лирики. На кой нам получать ещё и ProductName ? А на той, чтобы видеть над прогрессом установки не бестолковое мельтешение устанавливаемых файлов (или отсутствие оного), что обычно и наблюдаем по умолчанию, а видеть то, что конретно в данный момент устанавливается. Полученный ProductName и будем использовать в DetailPrint "Installing....

Следующий момент. Если с установкой одного msi пакета всё более-менее ясно, то как быть когда их придётся устанавливать несколько ?
Вот конкретный пример, когда я пересобирал отдельное приложение из гигантского пакета Adobe Creative Suite CS5 , для которого пришлось устанавливать аж 8 разных msi пакетов ! (Хотя по сути это были, расчленённые на отдельные дистрибутивы, составляющие их разных VC++... Но разрабам же виднее...)
Как быть с такими случаями в нашем случае ? Я бы предусмотрел в скрипте выбор для разных вариаций msi пакетов.
Например, для начала пусть присутствуют 9 чекбоксов для выбора. Тут есть нюансы, но про это позже...

Пакеты эти, надо предварительно подготовить, создав (для моего примера) 8 папок с именами 1...8, и в каждую из которых, поместить нужные msi дистпибутивы.

Т.е. , что получается :

Запускаем скомпилированный скрипт.

Отмечаем нужные для установки msi пакеты (msi1...msi8)

Отмеченные папки 1...8 с содержимым копируются в $TEMP. В каждую папку копируется файл vbs скрипта (чтобы не было путаницы).

Vbs скрипт начинает свою работу, создав в каждой папке ProductCode.txt и ProductName.txt.

Данные из ProductCode.txt и ProductName.txt заносятся в соответствующие переменные и записываются в код нового созданного файла msi.nsi. Где он будет создан, не критично. К примеру, в C:/myMSInsi

В этот файл msi.nsi записывается (пример на основе кода из справочника, наверное можно и иначе) :
Код: Выделить весь код
!define MSIGETPRODUCTINFO '!insertmacro MsiGetProductInfo'
Var MSI_PRODUCT
!macro MsiGetProductInfo PRODUCTCODE PROPERTY
и т.д.

Section 1
  SetOverwrite on
  ${MSIGETPRODUCTINFO} "{переменная для кода продукта 1 msi пакета)}" "ProductName" 
  и т.д.
SectionEnd
Сколько выбрано MSI пакетов для установки - столько запишется и секций.

Ну и в конце "подчищаем" за собой, удаляя не нужное.

Готовый код из файла msi.nsi используем для дальнейшей работы.

Моё сочинение наверняка спорно, потому прошу принять участие в "доводке" и совершенствовании...

Последний раз редактировалось MKN, 27-05-2011 в 10:53.


Отправлено: 10:47, 27-05-2011 | #148


Аватара для kotkovets

Ветеран


Сообщения: 1216
Благодарности: 486

Профиль | Отправить PM | Цитировать


MKN, а почему бы всю работу не поручить "бейсику" скрипту vbs - пущай код возврата (установлен - не установлен по коду продукта и пути) пишет в файлик, далее код возврата анализирует код NSIS. Есть мысль по этому поводу - сделать плагин к NSIS на досуге.
Примерно так:
1. Исполняемый файл *.exe который заводится препроцессором NSIS и этот файл *.exe (vbs скрипт) заинклудит массив номерков в код NSIS на этапе компиляции проекта
2. Далее плагин на этапе инсталяции обрабатывает массив номерков возвращает код возврата NSIS
3. Код NSIS анализирует полученные данные от плагина.

-------
Спасибо ВСЕМ за то, что тратите свое время, что бы ПОМОЧЬ МНЕ.


Последний раз редактировалось kotkovets, 27-05-2011 в 13:40.


Отправлено: 13:24, 27-05-2011 | #149

MKN MKN вне форума

Ветеран


Сообщения: 2355
Благодарности: 557

Профиль | Отправить PM | Цитировать


Цитата kotkovets:
а почему бы всю работу не поручить "бейсику" скрипту vbs »
К сожалению я не владею волшебством бейсика... И сдаётся мне что от vbs скрипта придётся отказаться из-за реакции на него антивирусов (пусть и не всех...).
Пользователь не должен страдать из-за этого. Если конечно Iska чего нибудь в скрипте не подправит...
И возможно придётся сконвертить vbs в exe.
Скрипт должен без проблем автономно запускаться на машинах пользователей, у которых есть проблемы либо с скриптоассоциациями , либо чего то скриптовое не установлено или повреждено. Сплошь и рядом встречаю машины, где не возможно так просто запустить файлы VBS...

Последний раз редактировалось MKN, 27-05-2011 в 15:57.


Отправлено: 15:35, 27-05-2011 | #150



Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » SFX Creator 4 Alpha - создаём SFX архивы

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Архиваторы - [addon] 7z SFX tools stable/7z SFX tools beta greg_b Наборы обновлений для Windows XP/2003/Windows 7 173 14-09-2012 19:30
[решено] Распаковщик Smart Install Maker D_Master Хочу все знать 3 31-05-2011 15:05
[решено] Интересует куда делись Regedit.exe | NTSD.exe | NETSETUP.exe | TELNET.exe Ricardo Проект WinStyle 11 30-07-2009 23:36
Отладчик exe файлов Go2 Программирование и базы данных 2 29-09-2005 12:34
*Решено* | Нужен распаковщик PECompact 1.22 -> Jeremy Collake RAY Программирование и базы данных 2 23-01-2005 15:01




 
Переход