1

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; 

あなたが提供できるどんな助けも本当に感謝しています!

4

1 に答える 1

0

最終的に、C# コンソール アプリケーションを作成してファイルを変更し、その EXE を InstallShield インストールから実行しました。これにより、ファイルの変更をより柔軟に制御できるようになり、問題の発生を回避できました。

于 2014-05-19T13:08:40.600 に答える