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

Показать сообщение отдельно

Ветеран


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

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


Цитата Anton04:
Нет не пробовал. Но я имел в виду именно Ваш приведённый скрипт. »
Там было в качестве примера только изменение пути установки.

Цитата Anton04:
Не понимаю зачем это…»
Затем, чтобы мне не приходилось изобретать примеры с ярлыком и реестром, которые Вам однозначно не пригодятся. Однако фактически, коллега, Вы вынуждаете меня делать это, не приводя ответа на прямо поставленный мною вопрос.

Цитата Anton04:
…так инструмента для добавления его в mst всё ровно нет... »
А если найду добавлю?

Цитата Anton04:
Частичное решение не устраивает. Мне нужно или всё или ничего. »
Ну, так попробуйте наконец. Windows Installer весьма и весьма масштабируемая технология.

Например:
Код: Выделить весь код
Option Explicit

Const msiOpenDatabaseModeReadOnly = 0
Const msiOpenDatabaseModeTransact = 1

Dim strPath2OriginalMSI
Dim strPath2WorkingMSI
Dim strPath2MST

Dim objFSO
Dim objWindowsInstaller
Dim objDatabase

Dim strQuery


strPath2OriginalMSI = "D:\Install\Opera\Opera 11.64\Opera_1164_1403_in.msi"
strPath2WorkingMSI  = GetTemporaryName()

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

With objFSO
	strPath2MST = .BuildPath(.GetParentFolderName(strPath2OriginalMSI), .GetBaseName(strPath2OriginalMSI) & ".mst")
	.CopyFile strPath2OriginalMSI, strPath2WorkingMSI
End With


Set objWindowsInstaller = WScript.CreateObject("WindowsInstaller.Installer")

With objWindowsInstaller.OpenDatabase(strPath2WorkingMSI, msiOpenDatabaseModeTransact)
	' Меняем путь установки приложения по умолчанию:
	strQuery = "UPDATE `Directory` SET `DefaultDir`='MyOperaPath' WHERE `Directory` = 'OPERA' AND `Directory_Parent` = 'ProgramFilesFolder'"
	
	With .OpenView(strQuery)
		.Execute
		.Close
	End With
	
	' Добавляем параметр реестра:
	strQuery = "INSERT INTO `Registry` " & _
		"(`Registry`,   `Root`, `Key`,                     `Name`,    `Value`,                       `Component_`) VALUES " & _
		"('Registry15', 2,      'SOFTWARE\Opera Software', 'My Key', 'My Value', 'ApplicationRegistration')"
	
	With .OpenView(strQuery)
		.Execute
		.Close
	End With
	
	' Добавляем ярлык:
	strQuery = "INSERT INTO `Shortcut` " & _
		"(`Shortcut`,         `Directory_`,    `Name`,    `Component_`,  `Target`,                          `ShowCmd`) VALUES " & _
		"('DesktopShortcut0', 'DesktopFolder', 'License', 'DesktopIcon', '[INSTALLDIR]defaults\license.txt', 1)"
	
	With .OpenView(strQuery)
		.Execute
		.Close
	End With
	
	.Commit
	
	Set objDatabase = objWindowsInstaller.OpenDatabase(strPath2OriginalMSI, msiOpenDatabaseModeReadOnly)
	
	If .GenerateTransform(objDatabase, strPath2MST) Then
		.CreateTransformSummaryInfo objDatabase, strPath2MST, 0, 0
		
		WScript.Echo "Create [" & strPath2MST & "]."
	Else
		WScript.Echo "Can't create [" & strPath2MST & "]."
	End If
	
	Set objDatabase = Nothing
End With

Set objWindowsInstaller = Nothing
objFSO.DeleteFile strPath2WorkingMSI, True

Set objFSO = Nothing

WScript.Quit 0
'=============================================================================

'=============================================================================
' Серый форум / vbscript: генерация пути для временного файла или папки
' (http://forum.script-coding.com/viewtopic.php?id=1221)
'=============================================================================
Function GetTemporaryName()
	Const TemporaryFolder = 2
	
	Dim strTempName
	
	With WScript.CreateObject("Scripting.FileSystemObject")
		Do
			strTempName = .BuildPath(.GetSpecialFolder(TemporaryFolder), .GetTempName)
		Loop While .FileExists(strTempName) Or .FolderExists(strTempName)
	End With
	
	GetTemporaryName = strTempName
End Function
'=============================================================================

Отправлено: 03:08, 27-05-2012 | #34