1

I'm having a couple of issues with InstallScript that I can not seem to figure out. The main one is that I need to add the following to the machine.config file:

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

but it is adding it as such:

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

Here is the code I'm using to update the file (the messages boxes are for debugging purposes).

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; 

Any help you could provide is really appreciated!

  • I ended up creating a C# console application to modify the file and then running that EXE from the InstallShield installation. This gave me a lot more flexibility and control over the modifying of the file to avoid causing issues. – JTMoney1996 May 09 '14 at 18:19
  • 1
    You should note how you resolved your issue in a self-answer (rather than as a comment) and accept it. Otherwise this question continues to appear unanswered. – J0e3gan May 18 '14 at 03:13
  • 1
    Added it as the answer, sorry about that. – JTMoney1996 May 19 '14 at 13:10

1 Answers1

0

I ended up creating a C# console application to modify the file and then running that EXE from the InstallShield installation. This gave me a lot more flexibility and control over the modifying of the file to avoid causing issues.