Готов. Чем именно?
Цитата:
Цитата ShaddyR
mrtech? Рад бы его использовать.. только... он тоже не совместим, с 4-и начиная. »
|
Им тоже. Но можно и «ручками» — правкой «em:maxVersion» в «*.xpi\install.rdf»:
Код:
<RDF…
<Description about="urn:mozilla:install-manifest">
<em:targetApplication>
<Description>
<em:maxVersion>5.0.*</em:maxVersion>
</Description>
</em:targetApplication>
</Description>
</RDF>
Можно это проделывать и скриптом. Вот здесь: CMD/BAT - [решено] помощь в поиске строки в файле по условию amel27 показал пример такого пакетного файла. Я, под себя, делал на VBScript. Выкладываю как есть; скрипт создавался для целей глобальной автоустановки дополнений, для запуска из «RunOnceEx.cmd». Выделенные закомментированные строки как раз отвечают за правку совместимости.
читать дальше »
Install Firefox extensions.vbs
Код:
Option Explicit
Const HKEY_LOCAL_MACHINE = &H80000002
Dim objFSO
Dim objFile
Dim objWshShell
Dim objSWbemServicesEx
Dim objSWbemObjectEx
Dim strSourcePath
Dim strCurrentVersion
Dim strInstallDirectory
Dim strPath2Extensions
Dim strPath2Extension
Dim objSubFolder
Dim strPath2Install_Rdf
Dim strNewTempFolderName
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
Set objWshShell = WScript.CreateObject("WScript.Shell")
If WScript.Arguments.Count = 1 Then
If objFSO.FolderExists(WScript.Arguments.Item(0)) Then
strSourcePath = WScript.Arguments.Item(0)
Set objSWbemServicesEx = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default")
Set objSWbemObjectEx = objSWbemServicesEx.Get("StdRegProv")
If objSWbemObjectEx.GetStringValue(HKEY_LOCAL_MACHINE, "SOFTWARE\Mozilla\Mozilla Firefox", "CurrentVersion", strCurrentVersion) = 0 Then
If objSWbemObjectEx.GetStringValue(HKEY_LOCAL_MACHINE, "SOFTWARE\Mozilla\Mozilla Firefox\" & strCurrentVersion & "\Main", "Install Directory", strInstallDirectory) = 0 Then
strPath2Extensions = objFSO.BuildPath(strInstallDirectory, "extensions")
If objFSO.FolderExists(strPath2Extensions) Then
For Each objSubFolder In objFSO.GetFolder(strSourcePath).SubFolders
For Each objFile In objSubFolder.Files
If UCase(objFSO.GetExtensionName(objFile.Path)) = UCase("xpi") Then
strNewTempFolderName = GetTemporaryFolderName()
If objWshShell.Run("""%ProgramFiles%\7-Zip\7z.exe"" x """ & objFile.Path & """ ""*"" -o""" & strNewTempFolderName & """ -y", 0, True) = 0 Then
With WScript.CreateObject("Msxml2.DOMDocument")
.async = False
.setProperty "SelectionLanguage", "XPath"
strPath2Install_Rdf = objFSO.BuildPath(strNewTempFolderName, "install.rdf")
If .load(strPath2Install_Rdf) Then
.setProperty "SelectionNamespaces", .documentElement.attributes.getNamedItem("xmlns:em").xml
WScript.Echo "Installing " & .selectSingleNode("//em:name[1]").firstChild.nodeValue & " " & .selectSingleNode("//em:version[1]").firstChild.nodeValue
'.selectSingleNode("//em:targetApplication//em:maxVersion[1]").firstChild.nodeValue = "4.0.*"
'.save strPath2Install_Rdf
strPath2Extension = objFSO.BuildPath(strPath2Extensions, .selectSingleNode("//em:id[1]").firstChild.nodeValue)
If Not objFSO.FolderExists(strPath2Extension) Then
objFSO.CreateFolder strPath2Extension
Else
objFSO.DeleteFolder strPath2Extension & "\*.*", True
objFSO.DeleteFile strPath2Extension & "\*.*", True
End If
objFSO.CopyFolder strNewTempFolderName & "\*.*", strPath2Extension & "\", True
objFSO.CopyFile strNewTempFolderName & "\*.*", strPath2Extension & "\", True
objFSO.DeleteFolder strNewTempFolderName, True
Else
WScript.Echo "Can't load [" & strPath2Install_Rdf & " for parsing]"
End If
End With
Else
WScript.Echo "Can't execute [""%ProgramFiles%\7-Zip\7z.exe"" x """ & objFile.Path & """ ""*"" -o""" & strNewTempFolderName & """ -y] correctly"
End If
End If
Next
Next
Else
WScript.Echo "Folder [" & strPath2Extensions & "] not found"
End If
Else
WScript.Echo "Not found key [Install Directory] in [HKEY_LOCAL_MACHINE\SOFTWARE\Mozilla\Mozilla Firefox\" & strCurrentVersion & "\Main]"
End If
Else
WScript.Echo "Not found key [CurrentVersion] in [HKEY_LOCAL_MACHINE\SOFTWARE\Mozilla\Mozilla Firefox]"
End If
Set objSWbemObjectEx = Nothing
Set objSWbemServicesEx = Nothing
Else
WScript.Echo "Folder [" & WScript.Arguments.Item(0) & "] not found"
End If
Else
WScript.Echo "Need argument"
End If
Set objWshShell = Nothing
Set objFSO = Nothing
WScript.Quit 0
'=============================================================================
'=============================================================================
Function GetTemporaryFolderName()
Const TEMP_FOLDER = 2
Dim strTempFolder
With objFSO
Do
strTempFolder = .BuildPath(.GetSpecialFolder(TEMP_FOLDER), .GetTempName)
Loop While .FolderExists(strTempFolder)
End With
GetTemporaryFolderName = strTempFolder
End Function
'=============================================================================
и код в «RunOnceEx.cmd», устанавливающий вызов этого скрипта посредством «RunOnceEx»:
Код:
REG ADD %Key%\%i% /V 3 /D "\"cscript.exe\" //nologo \"%systemdrive%\Install\Install Firefox extensions.vbs\" \"%sInstall%\%sPath%\Extensions\"" /F
В «%sInstall%\%sPath%\Extensions» просто лежат дополнения:
Код:
╔═ C:\...Installations\Mozilla Firefox 3.6.14\Extensions ═03:37
║и Имя │Размер│ Дата │Время║
║⌂.. │ Вверх│08.03.11│21:15║
║├Adblock Plus 1.3.3 │ Папка│26.02.11│21:08║
║├CoLT 2.5.1 │ Папка│26.02.11│21:08║
║├CustomBB 0.2a15 │ Папка│26.02.11│21:09║
║├Element Hiding Helper for Adblock Plus} Папка│26.02.11│21:10║
║├File Title 1.4 │ Папка│26.02.11│21:10║
║├Flashblock 1.5.14.2 │ Папка│26.02.11│21:10║
║├FlashGot 1.2.8.2 │ Папка│26.02.11│21:10║
║├ImgLikeOpera 0.6.20 │ Папка│26.02.11│21:10║
║├MR Tech Toolkit 6.0.4 │ Папка│26.02.11│21:10║
║├NoScript 2.0.9.7 │ Папка│26.02.11│21:10║
║├Russian spellchecking dictionary 0.4.4│ Папка│26.02.11│21:11║
║├Tab Control 0.5.3 │ Папка│26.02.11│21:11║
║├United States English Spellchecker 5.0} Папка│26.02.11│21:11║
║├UrlCorrector 0.4.2 │ Папка│26.02.11│21:13║
…
Из примера видно, что дополнения распаковываются из *.xpi посредством 7-zip туда, куда был установлен Firefox, затем правится уже извлечённый файл «install.rdf». Правка «em:maxVersion» делалась мною ввиду того, чтобы не переписывать каждый раз болванку при обновлении дополнений и/или Firefox: при помощи такой правки можно было установить Firefox (в том числе и новую версию с Flash-носителя), глобально установить дополнения, а затем просто обновить их, получив новые и, возможно, уже реально совместимые версии.
Но, если будет потребность, можно написать и такое: извлечь «install.rdf» из *.xpi, поправить соответствующую строку, сделать копию *.xpi (например, как *.compat.xpi) и добавить в эту копию поправленный «install.rdf».
|