// Скрипт для регистрации баз 1С 7.7
// (с)Zhurba
var IniFileName = "\\\\DEN\\Bases\\1c77bases.ini";
var RegFileName = "1c77bases.reg";
var str1C_Reg = "\\Software\\1C\\1Cv7\\7.7\\Titles";
var wsh = WScript.CreateObject("WScript.Shell");
var UserName = WScript.CreateObject("WScript.Network").UserName;
var fso = WScript.CreateObject("Scripting.FileSystemObject") ;
var RegFileName = wsh.ExpandEnvironmentStrings("%Temp%")+"\\"+RegFil eName;
//================================================== ===============
function echo(text) {return WScript.echo(text);}
function trim(S) {return S.replace(/^ +|[ \t\f\n\r\v]+$/g,"");}
//================================================== ===============
function getBases(ini)
{
//echo(ini);
posBases = ini.search(/\[Bases\]/);
if(posBases<0) return null;
posUsers = ini.search(/\[Users\]/);
if(posUsers<0) throw new Error("reg1с77bases.ERR: can't find USERS partition");
if(posUsers<posBases) throw new Error("reg1с77bases.ERR: USERS partition befor BASES");
var arrBaseRecs = ini.slice(posBases+7,posUsers).split(/[\f\n\r\v]/);
//echo(arrBaseRecs);
//ассоциативный массивчик для баз
var arrBases = WScript.CreateObject("Scripting.Dictionary");
if(arrBaseRecs!=null)
while(arrBaseRecs.length)
{
var strBaseRec = trim(arrBaseRecs.shift());
if(!strBaseRec.length) continue;
var arrBaseRec = strBaseRec.split(/=/);
if(arrBaseRec==null) continue;
if(arrBaseRec.length!=3) continue;
var base = trim(arrBaseRec[0]);
//echo("@"+base+"@");
if(arrBases.Exists(base)) arrBases.Remove(base);
arrBases.Add(base,trim(arrBaseRec[1])+"="+trim(arrBaseRec[2]));
}
return arrBases;
}
//================================================== ===============
function getUserBases(ini)
{
//Ищем раздел [Users]
var U_list = ini.match(/\[Users\](.|\s)*/g);
if(U_list==null) throw new Error("reg1с77bases.ERR: Can't find USERS partition");
if(U_list.length>1) throw new Error("reg1с77bases.ERR: too mach USERS partitions");
//echo(U_list[0]);
//Ищем все записи по юзеру UsersName
var arrUserRecs = U_list[0].match(RegExp(UserName+"(.*|\s*)","g"));
//echo(arrUserRecs.length+":\n"+arrUserRecs);
var arrUserBases = new Array();
if(arrUserRecs!=null)
while(arrUserRecs.length)
{
var strUserRec = trim(arrUserRecs.shift());
if(!strUserRec.length) continue;
var arrUserRec = strUserRec.split(/=/);
if(arrUserRec==null) continue;
if(arrUserRec.length==2) arrUserBases.push(trim(arrUserRec[1]));
else if(arrUserRec.length==3) arrUserBases.push(trim(arrUserRec[1])+"="+trim(arrUserRec[2]));
}
return arrUserBases;
}
//================================================== ===============
function main()
{
//Заливаем все из файла (списки баз для юзеров)
if(!fso.FileExists(IniFileName)) throw new Error("reg1с77bases.ERR: ini-file with StartList not found");
var inif = fso.OpenTextFile(IniFileName,1);
var ini = inif.Readall();
inif.Close();
//Читаем общий список баз из раздела [Bases]
var Bases = getBases(ini);
//echo((new VBArray(Bases.Keys())).toArray());
//Читаем список баз для юзера UserName из раздела [Users]
var UserBases = getUserBases(ini);
//echo(UserBases);
//Обрабатываем полученный список, добавляем базы в реестр
if(UserBases.length)
{
//создаем reg-файл
var rf = fso.CreateTextFile(RegFileName);
rf.WriteLine("Windows Registry Editor Version 5.00\n\n[HKEY_CURRENT_USER"+str1C_Reg+"]");
while(UserBases.length)
{
var base = UserBases.shift();
if(base=="<CLEAR>") try {wsh.RegDelete("HKCU"+str1C_Reg+"\\");} catch (err){}
else
{
if(Bases.Exists(base)) rf.WriteLine(Bases.Item(base));
else rf.WriteLine(base);
}
}
rf.Close();
wsh.Exec("regedit /s "+RegFileName);
};
}
//================================================== ===============
//main();
try {main();}
catch (err) {WScript.echo(err.message);}
|