2011-12-08 20 views
1

たとえば、exeの完全なファイルパスがC:\Projects\Executable\Serial Data Streaming Recorder.exeとして提供されている場合は、exeの名前を抽出する必要があります。これはSerial Data Streaming Recorderで、私はこの値をexeのフルファイルパスからの変数に動的に割り当てたいと思います。exeファイルのフルパスからInnosetupスクリプトのexeファイル名を取得する方法は?

は手動たとえば以下のように行わ:

#define ExePath "C:\Projects\Executable\Serial Data Streaming Recorder.exe" 
#define AppName "Serial Data Streaming Recorder" 

は私が動的にexeファイルの完全なファイルパスから変数AppNameに値Serial Data Streaming Recorderを割り当てます。

私は多くのファイルのinnoスクリプトの多くの場所でこの名前を使用していますので、この値を変数に代入して手動で行う必要はありません。

答えて

0

ええと...私は通常、インストールスクリプトで絶対パスを使用しないことでこれを解決します。また、単にこのようExePathを定義することができます。

#define BasicName "Serial Data Streaming Recorder" 
#define ExePath "C:\Projects\Executable\" + BasicName + ".exe" 

、その後、あなただけの名前を必要なとき{#BasicName}を使用しています。

さらに高度な処理を行うために文字列操作を行うことができるプリプロセッサスクリプト関数(pascalscriptではなく)がいくつかあります。

+0

の#define MyExePath "C:\実行可能なシリアル・データ・ストリーミングRecorder.exe \"
の#define MyAppExeName ExtractFileName(MyExePath) の#defineもしmyAppNameコピー(MyAppExeName、1、順位( "EXE。"、MyAppExeName) - 1) 私はこれをこのように解決........) – SamuelJames84

+1

@ SamuelJames84:私が言ったことは... – Deanna

2

[Code]の実行時にこれを行うにはExtractFileName()を使用してファイル名と拡張子を取得できます。私はあなたがChangeFileExt()関数に空白を渡して拡張子を削除することができると思うが、そうでなければ、Pos()Delete()のような標準的な文字列操作を使用してそれを見つけて削除することができます。

あなたはコンパイル時にこれを実行する必要がある場合は、ISPPを使用する必要がある、機能のほとんどが同じ名前とシグネチャを持っているので、それを削除する期間を取得するためにRPos()、ファイル名自体を取得するためにExtractFileName()を使用してDelete()

+0

返信いただきありがとうございます。ChangeFileExt()を使用してファイルの拡張子を変更することはできません。名前の最後に。 可能な最後の4文字を削除するいくつかの方法を提供し、まだ私は名誉を与えた。 – SamuelJames84

+0

ISPPで 'RPos()'と 'Delete()'を使いました。 – Deanna