2013-03-25 15 views
5

WindowsサービスとしてホストしているWCFサービスがあります。私は通常VSコマンドプロンプトに行き、installutil.exeを使用してサービスをインストールし、それをインストールしているマシン名に従ってapp.configのサービスのベースアドレスを変更してサービスを実行します。Inno Setup setup.exeを実行するとapp.configファイルが変更されます

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

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

私はapp.configファイルでMACHINE_NAMEを変更します。

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

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

お願いします。前もって感謝します。 :)

答えて

5

私は私のアプリの設定で文字列を置き換えるために使用します。
私は交換してくださいそれは何

:-)良く行うことができると確信しては、次のとおりです。

キー= "のappversion" 値= "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; 
+1

はい、たとえばXMLパーサーを使用しています。 MSXMLに精通している場合は、['this post'](http://stackoverflow.com/a/11254218/960757)に従ってください。それはあなたのニーズにそれを拡張することは非常に簡単です。 InnoSetup用の高速XMLパーサーが私のタスクリストに載っています(しかし時間がかかります)。 – TLama

+1

置き換えることができるテンプレートファイルに既知の一意のマーカー文字列がある場合(上記のコードに似ています)、XMLパーサ/ライターは不要です。ただし、そのようなマーカーを挿入できないファイルを変更できる必要がある場合(たとえば、ユーザーのシステムにすでにインストールされているファイルを更新する必要がある場合など)、良い考えです。ただし、上記のコードにはバグがあります。「DateTime」はコード関数の代わりにISPP値として扱われています。 'ExpandConstant'ではなく、直接呼び出されるべきです。 – Miral

+0

が修正されました。先端に感謝します。 – RobeN

2

を追加I 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; 
+2

必要に応じて、残りの要件についてお手伝いします(インストールが開始される前に入力ページを作成して、エンドポイントアドレスを入力し、インストールが成功した後に上記の機能を呼び出すことができます)。ちょうど私に知らせてください... – TLama

+0

うわー..それを試してみるつもりです...ありがとうございました...:D – Newbee

+0

どうですか?どんなフィードバックも高く評価されます;-) – TLama

関連する問題