Цитата Anton04:
Нет не пробовал. Но я имел в виду именно Ваш приведённый скрипт. »
|
Там было в качестве примера только изменение пути установки.
Затем, чтобы мне не приходилось изобретать примеры с ярлыком и реестром, которые Вам однозначно не пригодятся. Однако фактически, коллега, Вы вынуждаете меня делать это, не приводя ответа на прямо поставленный мною вопрос.
Цитата Anton04:
…так инструмента для добавления его в mst всё ровно нет... »
|
А если
найду добавлю?
Цитата Anton04:
Частичное решение не устраивает. Мне нужно или всё или ничего. »
|
Ну, так попробуйте наконец. Windows Installer весьма и весьма масштабируемая технология.
Например:
Код:
![Выделить весь код](images/misc/selectcode.png)
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
'=============================================================================