6

Windows サービスとしてホストしている WCF サービスがあります。通常、VS コマンド プロンプトに移動し、installutil.exe を使用してサービスをインストールします。次に、インストール先のマシン名に従って app.config 内のサービスのベース アドレスを変更し、サービスを実行します。

ベースアドレスは次のようになります。

<endpoint address="http://MACHINE_NAME/NFCReader/" binding="webHttpBinding"/>

app.config ファイルの MACHINE_NAME を変更します。

私はinno setupを使って同じことをしたいと思っています。

私が欲しいのは、ユーザーがsetup.exeファイルを実行してサービスをインストールするときです。ユーザーにサービスのベースアドレスを要求し、そのアドレスを使用してホストしたいと考えています。それが可能かどうか、またはその方法を理解できません。

何か助けてください。前もって感謝します。:)

4

2 に答える 2

5

アプリ構成の文字列を置き換えるために使用する単なる例です。
私はそれがより良くできると確信しています:-)

私が交換するものは次のとおりです。

add key="AppVersion" value="YYMMDD.HH.MM"

[Code]
procedure Update;
var
C: AnsiString;
CU: String;
begin
        LoadStringFromFile(ExpandConstant('{src}\CdpDownloader.exe_base.config'), C);
        CU := C;
        StringChange(CU, 'YYMMDD.HH.MM', GetDateTimeString('yymmdd/hh:nn', '.', '.'));
        C := CU;
        SaveStringToFile(ExpandConstant('{src}\Config\CdpDownloader.exe.config'), C, False);          
end;

function InitializeSetup: Boolean;
begin
  Update;
result := True;
end;
于 2013-03-25T14:57:52.820 に答える
3

構成ファイルの更新には XML パーサーを使用することをお勧めします。次の関数が役立ちます。ファイル パーサーとして MSXML を使用します。

[Code]
const
  ConfigEndpointPath = '//configuration/system.serviceModel/client/endpoint';

function ChangeEndpointAddress(const FileName, Address: string): Boolean;
var
  XMLNode: Variant;
  XMLDocument: Variant;  
begin
  Result := False;
  XMLDocument := CreateOleObject('Msxml2.DOMDocument.6.0');
  try
    XMLDocument.async := False;
    XMLDocument.preserveWhiteSpace := True;
    XMLDocument.load(FileName);    
    if (XMLDocument.parseError.errorCode <> 0) then
      RaiseException(XMLDocument.parseError.reason)
    else
    begin
      XMLDocument.setProperty('SelectionLanguage', 'XPath');
      XMLNode := XMLDocument.selectSingleNode(ConfigEndpointPath);
      XMLNode.setAttribute('address', Address);
      XMLDocument.save(FileName);
      Result := True;
    end;
  except
    MsgBox('An error occured during processing application ' +
      'config file!' + #13#10 + GetExceptionMessage, mbError, MB_OK);
  end;
end;
于 2013-03-25T18:13:01.673 に答える