2013-06-10 2 views
0

Я пишу скрипт, который хранит файлы резервных копий базы данных в нескольких местах. Кроме того, данные хранятся на NAS, который обычно доступен. Если это не так, сообщение об ошибке должно быть перехвачено. Я попробовал это так:JScript try catch network exception

wshshell = WScript.CreateObject("WScript.Shell"); 
fso = WScript.CreateObject("Scripting.FileSystemObject"); 

SetupPath = WScript.arguments(0); 
if (fso.FileExists(SetupPath)) 
{ 
    //Load setup JSON 
    SetupFile = fso.OpenTextFile(SetupPath, 1, true, 0); 
    eval(SetupFile.ReadAll()); 

    // Parse setup configuration from JSON 
    ... 
    BackupPath = Setup["BackupPath"]; 
    FilesForBackup = Setup["FilesForBackup"]; 
    NASBackupPath = Setup["NASBackupPath"]; 
    ... 

    CreateNewBackupFiles(); 

    Log("Script was successfully executed."); 
} 
else 
{ 
    Log("Script was not successfully executed."); 
} 

/* Creates a new compressed database backup */ 
function CreateNewBackupFiles() 
{ 
    tempfile = fso.GetTempName(); 

    file = fso.GetFile("C:\\Program\\7-Zip\\7z.exe"); 
    rarexe = file.ShortPath; 

    script = rarexe + " a -r " + tempfile + " " + FilesForBackup; 
    wshshell.Run(script, 0, true); 

    fso.CopyFile(tempfile, BackupPath + PrefixBackupFile + "backup.7z"); 

    //Save to NAS 
    if(NASBackupPath!="") 
    { 
      try 
      { 
        fso.CopyFile(tempfile, NASBackupPath); 
      } 
      catch(err) 
      { 
        Log("Path \"" + NASBackupPath + "\" not available."); 
      } 
    } 
    fso.DeleteFile(tempfile, true); //delete tempfile 
} 

/* Saves a log in "Debug.Log" */ 
function Log(msg) 
{ 
    fs = WScript.CreateObject("Scripting.FileSystemObject"); 
    a = fs.OpenTextFile("Debug.log", 8, true, 0); 
    line = "[" + CurrentTime()+ "] "; 
    line += "[" + WScript.ScriptName + "] "; 
    line += "[" + msg + "]"; 
    a.WriteLine(line); 
} 

Тем не менее, ошибки продолжают выдаваться. Я использую скрипт в Windows XP SP3. Есть ли возможность поймать эту ошибку с помощью javascript?

спасибо

+0

Если это единственный код, который когда-либо порождает ошибки, есть три причины, почему это должно бросить ошибку: 'NASBackupPath' не определено, есть синтаксическая ошибка в коде или есть некоторые другая ошибка с функцией «Журнал». –

+0

Спасибо за ваш ответ! NASBackupPath определен в начале скрипта. Если Networkpath доступен, все работает нормально! Функция Log также используется для сохранения информации о других сценариях. Поэтому я думаю, что утверждение try-catch, похоже, не в состоянии поймать такую ​​ошибку. – Panschi11291

+0

Можете ли вы показать остальную часть скрипта или нет? –

ответ

0

Я нашел ошибку. Ошибка произошла из «Журнала». Во-первых, не каждый раз должен создаваться новый «объект файловой системы». Его можно просто использовать для объекта «fso». Кроме того, открытый текстовый файл должен быть закрыт в конце функции. Вот исправление:

function Log(msg) 
{ 
    a = fso.OpenTextFile("Debug.log", 8, true, 0); 
    line = "[" + CurrentTime()+ "] "; 
    line += "[" + WScript.ScriptName + "] "; 
    line += "[" + msg + "]"; 
    a.WriteLine(line); 
    a.Close(); 
}