Установщик Office 2007 не регистрируется при запуске во время сценария запуска

Я использую сценарий запуска для развертывания Microsoft Office 2007 Standard. Это работает не совсем правильно, и я пытаюсь найти информацию для регистрации. К сожалению, журнал установки не генерируется. Я попытался настроить журнал в%temp%\, C:\, %systemroot%\temp и оставить его по умолчанию, но все безрезультатно. Ничего не отображается в журналах событий. Могу ли я где-нибудь еще искать информацию о том, что происходит с установщиком?

Изменить: вот сценарий, который я в настоящее время работаю:

// WSH System Objects
var shell = new ActiveXObject("WScript.Shell");
var fso = new ActiveXObject("Scripting.FileSystemObject")
var env = shell.Environment("Process");

// Well Known Constants
var EVENT_SUCCESS = 0;
var EVENT_ERROR = 1;
var EVENT_WARNING = 2;
var EVENT_INFORMATION = 4;
var EVENT_AUDIT_SUCCESS = 8;
var EVENT_AUDIT_FAILURE = 16;

// Custom Constants
var MESSAGE_DEPLOYMENT_START = "Outlook deployment started.";
var MESSAGE_ALREADY_DEPLOYED = "Deployment halted. Outlook already deployed at ";
var MESSAGE_ERROR_UNKOWN_GUID = "Deployment halted. An unknown Office product GUID has been detected.";
var MESSAGE_SETUP_STANDARD = "Initializing setup for Office12 Standard Edition. See Install log at " + env("TEMP") + "\\SetupExe(*).log";
var MESSAGE_SETUP_PROPLUS = "Initializing setup for Office12 Professional Plus. See install log at " + env("TEMP") + "\\SetupExe(*).log";
var MESSAGE_OFFICE_NOT_DETECTED = "Office was not detected; deployment aborted.";
var MESSAGE_OFFICE_VERSION_NOT_DETECTED = "Office version could not be detected; deployment aborted.";
var MESSAGE_UNKNOWN_ERROR = "An unknown error has occurred: ";
var MESSAGE_UNKNOWN_GUID = "Detected an unknown GUID";
var ECODE_CANNOT_READ_VALUE = 2;
var REG_OFFICE12_64 = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\Office\\12.0\\";
var REG_OFFICE12_32 = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Office\\12.0\\";
var REG_OFFICE12_REGISTRATION = "Registration";
var REG_OUTLOOK_INSTALL_LOCATION = "InstallRoot\\Path";
var DEPLOYMENT_SOURCE_STANDARD = "\"\\\\netapps\\apps\\Microsoft\\Office 2007 Standard\"";
var CONFIG_PATH_STANDARD = "\"\\\\netapps\\apps\\Microsoft\\Office 2007 Standard\\Config.xml\"";
var DEPLOYMENT_SOURCE_PROPLUS = "\"\\\\netapps\\apps\\Microsoft\\Office 2007 Professional Plus\"";
var CONFIG_PATH_PROPLUS = "\"\\\\netapps\\apps\\Microsoft\\Office 2007 Professional Plus\\Config.xml\"";
var OFFICE12_STANDARD_GUID = "{90120000-0012-0000-0000-0000000FF1CE}";
var OFFICE12_PROPLUS_GUID = "{90120000-0011-0000-0000-0000000FF1CE}";

// Log start of script.
messageEnvironmentSettings = "Environment Settings: \n";
messageEnvironmentSettings += "%TEMP%: " + env("TEMP") + "\n";
messageEnvironmentSettings += "%SYSTEMROOT%: " + env("SYSTEMROOT") + "\n";
messageEnvironmentSettings += "%WINDIR%: " + env("WINDIR") + "\n";

shell.LogEvent(EVENT_INFORMATION, MESSAGE_DEPLOYMENT_START + "\n\n" + messageEnvironmentSettings);


//***************** Get root Office registry key.**************
var regOfficeRoot;

try
{
    shell.RegRead(REG_OFFICE12_64);
    regOfficeRoot = REG_OFFICE12_64;
}
catch (e)
{
    if ((e.number & 0xFFFF) == ECODE_CANNOT_READ_VALUE)
    {
        try 
        {
            shell.RegRead(REG_OFFICE12_32);
            regOfficeRoot = REG_OFFICE12_32;
        }       
        catch (e2)
        {
            if ((e2.number & 0xFFFF) == ECODE_CANNOT_READ_VALUE)
            {
                // Office is not installed. Log and quit.
                shell.LogEvent(EVENT_INFORMATION, MESSAGE_OFFICE_NOT_DETECTED);
                WScript.Quit(0);
            }
            else
            {
                shell.LogEvent(EVENT_ERROR, MESSAGE_UNKNOWN_ERROR + e2.message);
            }
        }
    }
    else
    {
        shell.LogEvent(EVENT_ERROR, MESSAGE_UNKNOWN_ERROR + e.message);
    }
}

//************************ Find out if Outlook is installed.*******************************
try
{
    var outlookInstallationLocation = shell.RegRead(regOfficeRoot + "Outlook\\" + REG_OUTLOOK_INSTALL_LOCATION);

    // Log and exit.
    shell.LogEvent(EVENT_INFORMATION, MESSAGE_ALREADY_DEPLOYED + "\"" + outlookInstallationLocation + "\"" );
    WScript.Quit(0);
}
catch (e)
{
    if ((e.number & 0xFFFF) == 2)
    {
        // Key didn't exist; Outlook is not installed. Supress registry read error.
    }
    else
    {
        shell.LogEvent(EVENT_ERROR, MESSAGE_UNKNOWN_ERROR + e.message);
    }
}




//***************** Discover version of office installed.**************
var detectedOfficeGuid;
try
{
    shell.RegRead(regOfficeRoot + "Registration\\" + OFFICE12_STANDARD_GUID + "\\");
    detectedOfficeGuid = OFFICE12_STANDARD_GUID;
}
catch (e)
{

    if ((e.number & 0xFFFF) == ECODE_CANNOT_READ_VALUE)
    {
        try
        {
            shell.RegRead(regOfficeRoot + "Registration\\" + OFFICE12_PROPLUS_GUID + "\\");
            detectedOfficeGuid = OFFICE12_PROPLUS_GUID;
        }
        catch (e)
        {
            shell.LogEvent(EVENT_ERROR, MESSAGE_OFFICE_VERSION_NOT_DETECTED);
            WScript.Quit(1);
        }
    }
    else
    {
        shell.LogEvent(EVENT_ERROR, MESSAGE_UNKNOWN_ERROR + e.message);
    }
}


//************************* Installation ******************************

if (detectedOfficeGuid == OFFICE12_STANDARD_GUID)
{
    var messageSetup = MESSAGE_SETUP_STANDARD;
    var deploymentCommand = DEPLOYMENT_SOURCE_STANDARD + "\\setup.exe /config " + CONFIG_PATH_STANDARD;
}
else if (detectedOfficeGuid = OFFICE12_PROPLUS_GUID)
{
    var messageSetup = MESSAGE_SETUP_PROPLUS;
    var deploymentCommand = DEPLOYMENT_SOURCE_STANDARD + "\\setup.exe /config " + CONFIG_PATH_STANDARD;
}
else
{
    shell.LogEvent(EVENT_ERROR, MESSAGE_ERROR_UNKNOWN_GUID);
    WScript.Quit(1);
}

shell.LogEvent(EVENT_INFORMATION, messageSetup + "\n" + deploymentCommand);
var setupExec = shell.exec(deploymentCommand);

shell.LogEvent(EVENT_INFORMATION, "Exit Code: " + setupExec.ExitCode);

1 ответ

Решение

Ну, я нашел проблему. Исполняемый файл установки был прерван Windows до того, как он смог что-либо сделать, что привело к путанице. Казалось, что установщик просто не выполняет свою работу правильно.

Похоже, что исполняемый файл установки вызывался асинхронно, и Windows не дожидалась его завершения, прежде чем продолжить процесс загрузки. Следующий код, похоже, решил проблему:

while ( setupExec.Status == 0 )
{
    WScript.sleep(1000);
}

Я добавил этот цикл непосредственно после вызова исполняемого файла установки. Он проверяет состояние запущенного процесса, затем спит в течение одной секунды, пока сам процесс не завершится. Это гарантирует, что установщик действительно сделает то, что хочет.

Другие вопросы по тегам