3

質問があります。インターネットを見回しましたが、助けが得られませんでした。これが問題です。-アプリケーションパスの場所をXMLノードに保存したい。問題は、インストーラーが私が書いたのとまったく同じように、そこに置いた単語を書き込むため、ディレクトリにconsts名を使用できないことです。

 function NextButtonClick2(CurPageID: Integer): Boolean;
   begin
    Result := True;
    SaveValueToXML(ExpandConstant('{pf}\XXX\Config.xml'), '//@param', PEdit.Text);
    SaveValueToXML(ExpandConstant('{pf}\XXX\Config.xml'), '//@path', '{app}\XXX\Aplication.exe');
   end;

これは私が得た結果です

<?xml version="1.0" encoding="UTF-8"?>
-<games> <game priority="0" display="1" param="test" path="{app}\Aplication.exe" id="1036"/> </games>

これは私が期待する結果です:

<?xml version="1.0" encoding="UTF-8"?>
-<games> <game priority="0" display="1" param="test" path="C:\Program Files (x86)\XXX\Aplication.exe" id="1036"/> </games>

場所は適切です...しかし、私がそれを手動で書いた場合に限ります。そしてそれは問題です、インストーラーは自動的にXMLからパスノードを編集します...そしてユーザーが別のハードドライブ文字[C、D、F、Hなど]または別のパスの場所を持っている場合メインアプリケーションでは、インストール中にエラーが発生します。

助けてください!これからもありがとう!

4

1 に答える 1

2

XMLの名前のためだけに、保存したい値に対してExpandConstant関数を呼び出していません。

コードを次のように変更します。

function NextButtonClick2(CurPageID: Integer): Boolean;
begin
  Result := True;
  SaveValueToXML(ExpandConstant('{pf}\XXX\Config.xml'), '//@param', PEdit.Text);
  SaveValueToXML(ExpandConstant('{pf}\XXX\Config.xml'), '//@path',
    ExpandConstant('{app}\XXX\Aplication.exe'));

終わり;

そして、あなたはあなたが望むものを手に入れるでしょう。

于 2012-11-20T16:27:53.720 に答える