InstallScript и machine.config

У меня есть пара проблем с InstallScript, которые я не могу понять. Основной из них заключается в том, что мне нужно добавить в файл machine.config следующее:

<system.transactions>
    <machineSettings maxTimeout="02:00:00" />
</system.transactions>

но он добавляет его как таковой:

<system.transactions>
    <machineSettings>
        <maxTimeout>"02:00:00"</maxTimeout>
    </machineSettings>
</system.transactions>

Вот код, который я использую для обновления файла (окна сообщений предназначены для целей отладки).

function STRING GetMachineConfigPath(hMSI)
    STRING strRetVal;
    NUMBER nSize, nType;
begin
    nSize = MAX_PATH - 1;
    MsiGetProperty(ISMSI_HANDLE, "MACHINECONFIGPATH", strRetVal, nSize);
    return strRetVal;
end;

function SaveMachineConfigSettings(hMSI) 
    OBJECT oDoc; // XML Document object 
    OBJECT oNode; // A node in the XML DOM tree 
    OBJECT CurrParent; // Current parent node 
    STRING szFilename;
    BOOL successfulLoad;
begin

    szFilename = GetMachineConfigPath(hMSI) + "config\\machine.config";

    if Is(FILE_EXISTS, szFilename) = FALSE then
        MessageBox("Could not find machine.config file.", 0);
        return -1;
    endif;

    set oDoc = CreateObject("Msxml2.DOMDocument");
    if (IsObject(oDoc) = FALSE) then
        MessageBox("Could not open machine.config file.", 0);
        return -1;
    endif;

    oDoc.Async = FALSE; 
    oDoc.setProperty("SelectionLanguage", "XPath");

    successfulLoad = oDoc.load(szFilename);
    MessageBox("File loaded successfully.", 0);

    if (successfulLoad = FALSE) then
        MessageBox("File did not load successfully.", 0);
        return -1;
    endif;

    set CurrParent = oDoc.documentElement;
    set oNode = AddSetting(oDoc, CurrParent, "system.transactions", ""); 
    set CurrParent = oNode; 
    set oNode = AddSetting(oDoc, CurrParent, "machineSettings", "");
    set CurrParent = oNode;
    set oNode = AddSetting(oDoc, CurrParent, "maxTimeout", '"02:00:00"');

    // Write the XML document to a file. 
    oDoc.save(szFilename);

    MessageBox("File updated successfully.", 0);

    set oNode = NOTHING; 
    set oDoc = NOTHING; 

    return 0;
end; 

function OBJECT AddSetting(oDoc, oParent, szNodeName, szValue) 
    OBJECT oNode;
begin 
    // Add a carriage return & line feed to make the output easier to read. 
    set oNode = oDoc.createTextNode("\n"); 
    oParent.appendChild(oNode); 

    // Create the new setting node and value. 
    set oNode = oDoc.createElement(szNodeName); 
    oNode.text = szValue; 
    oParent.appendChild(oNode);

    MessageBox("Node created successfully.", 0);

    return oNode; 
end; 

Любая помощь, которую вы могли бы предоставить, очень ценится!


person JTMoney1996    schedule 23.04.2014    source источник
comment
В итоге я создал консольное приложение C# для изменения файла, а затем запустил этот EXE-файл из установки InstallShield. Это дало мне гораздо больше гибкости и контроля над изменением файла, чтобы избежать проблем.   -  person JTMoney1996    schedule 09.05.2014
comment
Вы должны отметить, как вы решили свою проблему в ответе на себя (а не в комментарии) и принять его. В противном случае этот вопрос так и останется без ответа.   -  person J0e3gan    schedule 18.05.2014
comment
Добавил это как ответ, извините за это.   -  person JTMoney1996    schedule 19.05.2014


Ответы (1)


В итоге я создал консольное приложение C# для изменения файла, а затем запустил этот EXE-файл из установки InstallShield. Это дало мне гораздо больше гибкости и контроля над изменением файла, чтобы избежать проблем.

person JTMoney1996    schedule 19.05.2014