2017-01-10 6 views
0

Inno Setupスクリプト内で、カスタムVBアプリケーションをインストールするVB実行可能プログラムを実行します。Inno Setup - サブインストーラによって生成されたディレクトリツリーを置き換えます

これが完了したら、VBセットアップが完了したら、いくつかのファイルをコピーして、VBセットアップ実行可能ファイルによって作成されたファイルとフォルダを上書きする必要があります。 これらの '更新された'ファイルは、Inno Setupによって[Files]セクションに一時フォルダに格納され、そのフォルダにターゲットPCに正常に展開されています。

問題は、何を試しても何らかの理由でFileCopyコマンドが無視されているようです。

だから私は必要な手順は次のとおりである:

//実行する必要がありますVBのセットアップ実行可能ファイルをコピーし、VBのセットアップが

[Files] 
    Source: "C:\##Deploy\Titan\LABORATORY\BTLABSETUP.msi" ; DestDir: "{app}\Temp" ; Components: Laboratory ; Permissions: users-full 
    Source: "C:\##Deploy\Titan\LABORATORY\BetolinkLAB\*.*" ; DestDir: "{app}\Temp" ; Components: Laboratory ; Permissions: users-full ; Flags: ignoreversion recursesubdirs 

を走った後にVBの設定を更新するファイルをコピーしますVBセットアップ(OK実行)を実行します。

[Run] 
    Filename: "msiexec.exe"; Parameters: "/i ""{app}\Temp\BTLABSETUP.msi" ; AfterInstall: CopyAllFiles 

すぐにVB実行可能ファイルの後に、ファイルをコピーして上書きする必要があります。

私が今必要とするのは、VB実行可能ファイルによって作成された同じディレクトリ構造のファイルを置き換えるために、対象のコンピュータ、Tempフォルダにコピーされたファイルとフォルダをコピーすることです。

たとえば、すべてのファイルをtemp \ Configurationフォルダから取り出し、{app} \ Configurationフォルダにある同じファイルを上書きします。

私はafterinstallたサンプルから使用理由です:一時ソース内のすべてのファイルとフォルダがありますが、私はしましたCopyAllFilesを呼び出し、これはCopyAllFiles

procedure CopyAllFiles; 
begin 

    MsgBox('About to Copy the files', mbInformation, MB_OK); 

    FileCopy('{app}\Temp\*.*'       , '{app}\*.*'       , False) 
    FileCopy('{app}\Temp\Configuration\*.*'    , '{app}\Configuration\*.*'   , False) 
    FileCopy('{app}\Temp\Configuration\Korinthos\*.*' , '{app}\Configuration\Korinthos\*.*' , False) 
    FileCopy('{app}\Temp\Configuration\Metamorfosi\*.*' , '{app}\Configuration\Metamorfosi\*.*', False) 
    FileCopy('{app}\Temp\Manual\*.*'      , '{app}\Manual\*.*'     , False) 
    FileCopy('{app}\Temp\ScriptsUpload\*.*'    , '{app}\ScriptsUpload\*.*'   , False) 
    FileCopy('{app}\Temp\Temp\*.*'      , '{app}\Temp\*.*'      , False) 
    FileCopy('{app}\Temp\Templates\*.*'     , '{app}\Templates\*.*'    , False) 
    FileCopy('{app}\Temp\Temporary\*.*'     , '{app}\Temporary\*.*'    , False) 
end; 

ための私のコードですそれらをチェックし、何も欠けている。 私もターゲットのワイルドカードなしで試してみましたが、どちらもうまくいきませんでしたが、CurStepChangedで試してみましたが、それ以上のものはありませんでした。

ポップアップするメッセージボックスから、VB実行可能ファイルの後にコードがCopyAllFilesプロシージャに入ることがわかりましたが、何も起こりません。

任意のヘルプや回避策は歓迎以上になり、非常に遅く、すでにクライアントのために、この設定を準備をしてする必要があり、スタックは...

はあなたに
ヤニス

+0

「FileCopy」はワイルドカードをサポートしていません。この関数は、単一ファイルを新しい宛先にコピーします。この場合、ここでループのようなフォルダ内のファイルを反復処理する必要があります[Inno Setup - FileCopyはパス名にワイルドカード文字を使用します](http://stackoverflow.com/questions/13688882/inno-setup-filecopy-use-wildcard-character -in-pathname)を指定します。あるいは、 '[Files]'セクションに 'Check'や' BeforeInstall'関数( 'BeforeInstall'がVBのインストールを引き起こす可能性がある)を追加して' external'ソースとして配置することもできます。 – RobeN

答えて

1

FileCopyがシングルをコピーすることができますありがとうございましたファイルのみ。

ディレクトリツリー全体をコピーするには、
Inno Setup: copy folder, subfolders and files recursively in Code sectionを参照してください。あなたのケースで


ものの[Files]セクションが処理される前に、プログラムで.msiをインストールするには、より適切な(実現しやすい)のではないでしょうか?そしてFilesセクションにファイルを直接{app}にインストールさせますか?

関連する問題