2008年3月8日星期六

绿色版火狐脚本-winxp下

因为经常在多台电脑上用火狐,所以曾经写过自动安装火狐的脚本,然后利用自解压文件释放扩展,用起来有点麻烦,最近有空总算彻底解决了便携的问题,你可以把火狐跟你的扩展随身携带。
原理是火狐在运行的时候会先检查c:\Documents and Settings\当前系统的用户名\Application Data\Mozilla\Firefox\目录下是否有pluginreg.dat和profiles.ini,如果这两个其中一个没有存在就会在这个目录重新建立这两个文件,并在这个目录下新建Profiles目录,并在这个目录内创建默认的配置文件。所有我这个脚本的作用就是在没有安装火狐的系统上在这个目录建立pluginreg.dat和profiles.ini这两个文件,并把默认的配置文件指向自己提前设置的配置文件来达到免安装的效果。在安装有火狐的系统上将把自己的配置文件设置成自己的配置文件,并可以在火狐退出的时候选择还原默认。
注,脚本用autoit编写,aitoit版本为v3.2.10.0
代码如下:


#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Res_Description=随风制作
#AutoIt3Wrapper_Res_Fileversion=1.0.0.0
#AutoIt3Wrapper_Res_LegalCopyright=随风
#AutoIt3Wrapper_Res_SaveSource=y
#AutoIt3Wrapper_Run_Tidy=y
#Tidy_Parameters=/tc 0
#AutoIt3Wrapper_Tidy_Stop_OnError=n
#AutoIt3Wrapper_Run_cvsWrapper=y
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
Dim $IsExit = 0

;读取本地的设置
;$MyProName用来保存本地配置文件里设置的配置名,可以任意
$MyProName = IniRead('MyPro.ini', 'state', 'name', 'NOTFOUND')
;~ $MyProDir用来保存本地配置文件的相对路径,必须确保存在,否则火狐会出错
$MyProDir = IniRead('MyPro.ini', 'state', 'ProDir', 'NOTFOUND')
If $MyProName = 'NOTFOUND' Or $MyProDir = 'NOTFOUND' Then
MsgBox(0, '错误', '读取配置文件错误,请检查文件MyPro.ini是否存在')
Exit
EndIf
;~ $IsDelCache用来设置是否让脚本自动在火狐退出的时候清除火狐的缓存,不设置或者设置成0将不清除火狐的缓存
;~ $CacheDir用来保存火狐缓存的目录地址,不设置默认为配置文件夹里的cache目录,如果设置请自行确认目录正确
$IsDelCache = IniRead('MyPro.ini', 'state', 'DelCach', 0)
If $IsDelCache <> 0 Then
$CacheDir = IniRead('MyPro.ini', 'state', 'TempDir', $MyProDir & '\Cache')
If StringInStr($CacheDir, ':') = 0 Then $CacheDir = @ScriptDir & '\' & $CacheDir
EndIf
$MyProDir = @ScriptDir & '\' & $MyProDir
;IsClear是用来设置在火狐退出后是否让脚本删除设置信息的,设置成1删除,否则不删除
$IsClear = IniRead('MyPro.ini', 'state', 'IsClear', 0)

;检查火狐是否安装,如果没有安装建立默认的配置文件
If Not FileExists(@AppDataDir & "\Mozilla\Firefox\pluginreg.dat") Then
FileCopy('pluginreg.dat', @AppDataDir & "\Mozilla\Firefox\pluginreg.dat",9)
EndIf
If Not FileExists(@AppDataDir & "\Mozilla\Firefox\profiles.ini") Then
;在当前用户没有安装,重新建立默认的配置文件
IniWrite(@AppDataDir & "\Mozilla\Firefox\profiles.ini", 'General', 'StartWithLastProfile', '1')
IniWrite(@AppDataDir & "\Mozilla\Firefox\profiles.ini", 'Profile0', 'Name', 'default')
IniWrite(@AppDataDir & "\Mozilla\Firefox\profiles.ini", 'Profile0', 'IsRelative', '1')
;下面的Profiles/4gxa4no0.default是无意义的目录名,类似这种形式的就可
IniWrite(@AppDataDir & "\Mozilla\Firefox\profiles.ini", 'Profile0', 'Path', 'Profiles/4gxa4no0.default')
EndIf

;检查当前配置是否是本地的默认设置
;如果存在但不是默认设置则把他更改为默认设置。
$FirefoxProfileName = IniReadSectionNames(@AppDataDir & "\Mozilla\Firefox\profiles.ini")
If $FirefoxProfileName[0] > 2 Or Not @error Then
For $i = 3 To $FirefoxProfileName[0]
$TempName = IniRead(@AppDataDir & "\Mozilla\Firefox\profiles.ini", $FirefoxProfileName[$i], 'Name', 'NOTFOUND')
$TempDir = IniRead(@AppDataDir & "\Mozilla\Firefox\profiles.ini", $FirefoxProfileName[$i], 'Path', 'NOTFOUND')
$TempIsDefault = IniRead(@AppDataDir & "\Mozilla\Firefox\profiles.ini", $FirefoxProfileName[$i], 'Default', '0')
If $TempName = $MyProName Then
If $TempDir = $MyProDir Then
If $TempIsDefault Then
$LastPro = $FirefoxProfileName[0] - 2
$LastPro = 'Profile' & $LastPro
ConsoleWrite('$LastPro=' & $LastPro & @CRLF)
ConsoleWrite('$FirefoxProfileName[$i]=' & $FirefoxProfileName[$i] & @CRLF)
IniRenameSection(@AppDataDir & "\Mozilla\Firefox\profiles.ini", $LastPro, 'last')
IniRenameSection(@AppDataDir & "\Mozilla\Firefox\profiles.ini", $FirefoxProfileName[$i], $LastPro)
IniRenameSection(@AppDataDir & "\Mozilla\Firefox\profiles.ini", 'last', $FirefoxProfileName[$i])
IniWrite('MyPro.ini', 'save', 'OldPro', $FirefoxProfileName[$i])
$IsExit = 1
ExitLoop
EndIf
EndIf
EndIf
Next
EndIf


;如果当前配置不是本地配置则建立本地配置的设置
If Not $IsExit Then
$MyProSectionName = $FirefoxProfileName[0] - 1
$MyProSectionName = 'Profile' & $MyProSectionName
IniWrite(@AppDataDir & "\Mozilla\Firefox\profiles.ini", $MyProSectionName, 'Name', $MyProName)
IniWrite(@AppDataDir & "\Mozilla\Firefox\profiles.ini", $MyProSectionName, 'IsRelative', '0')
IniWrite(@AppDataDir & "\Mozilla\Firefox\profiles.ini", $MyProSectionName, 'Path', $MyProDir)
IniWrite(@AppDataDir & "\Mozilla\Firefox\profiles.ini", $MyProSectionName, 'Default', '1')
EndIf

;运行火狐
$Pid = Run('firefox.exe', @ScriptDir)

;检查设置,如果需要清理配置信息则每隔30检查一次火狐是否退出,如果火狐退出则删除缓存文件夹
If $IsDelCache <> 0 Then
ConsoleWrite('IsDelCache')
While ProcessExists($Pid)
Sleep(30000)
WEnd
DirRemove($CacheDir)
EndIf

;检查设置,如果需要清理配置信息则每隔30检查一次火狐是否退出,如果火狐退出则删除或者恢复相应信息
If $IsClear <> 0 Then
ConsoleWrite('IsClear ')
While ProcessExists($Pid)
Sleep(30000)
WEnd
$FirefoxProfileName = IniReadSectionNames(@AppDataDir & "\Mozilla\Firefox\profiles.ini")
If $FirefoxProfileName[0] = 3 Then
FileDelete(@AppDataDir & "\Mozilla\Firefox\profiles.ini")
FileDelete(@AppDataDir & "\Mozilla\Firefox\pluginreg.dat")
EndIf
$oldpro = IniRead('MyPro.ini', 'save', 'OldPro', 'NOTFOUND')
If $oldpro <> 'NOTFOUND' Then
$LastPro = $FirefoxProfileName[0] - 2
$LastPro = 'Profile' & $LastPro
IniRenameSection(@AppDataDir & "\Mozilla\Firefox\profiles.ini", $LastPro, 'last')
IniRenameSection(@AppDataDir & "\Mozilla\Firefox\profiles.ini", $oldpro, $LastPro)
IniRenameSection(@AppDataDir & "\Mozilla\Firefox\profiles.ini", 'last', $oldpro)
IniDelete('MyPro.ini', 'save')
EndIf
EndIf


脚本里提到的MyPro.ini文件结构为:
[state]
;~ Name用来保存本地配置文件里设置的配置名,可以任意
;~ ProDir用来保存本地配置文件的相对路径,必须确保存在,否则火狐会出错.用相对路径是为了好管理.
;~ DelCache用来设置是否让脚本自动在火狐退出的时候清除火狐的缓存,不设置或者设置成0将不清除火狐的缓存
;TempDir用来保存火狐缓存的目录地址,不设置默认为配置文件夹里的cache目录,如果设置请自行确认目录正确,
;并删除前面的“;”。这个目录可以是绝对路径或者相对firefox的路径
;IsClear是用来设置在火狐退出后是否让脚本删除设置信息的,设置成1删除,否则不删除
;即c:\Documents and Settings\当前系统的用户名\Application Data\Mozilla\Firefox\目录下的pluginreg.dat和profiles.ini
;如果原来的计算机上有则只删除自己的配置信息
Name=flyeblue
ProDir=flyeblue
DelCach=0
;TempDir=
IsClear=0


注意运行的时候脚本必须放在firefox的目录里面,MyPro.ini也是。

没有评论: