cancel
Showing results for 
Search instead for 
Did you mean: 

CopyFile関数が上書きしようとするファイルがロックされていると関数がリターンしない

CopyFile関数が上書きしようとするファイルがロックされていると関数がリターンしない

Summary

本記事は、CopyFile関数が上書きしようとするファイルがロックされていると関数がリターンしない、もしくは、不正な値をリターンする問題とその回避方法について解説しています。

Symptoms

インストーラがCopyFile関数を使用していて、そのCopyFile関数が既存のロックされたファイルに上書きしようとすると以下のいずれかが発生します。
  • CopyFile関数がリターンせず、インストーラがハングします。
  • CopyFile関数が不正な値をリターンするために、インストーラが中断します。

Cause

本バグはInstallShield 2013から混入したことが確認されています。

Steps to Reproduce

インストーラ起動前に、CopyFile関数の出力先に、出力名のファイルが存在し、ロックされていることを確認します。インストーラを起動すると本問題は発生します。

Resolution

InstallShield2014 SP1で本バグを回避するためには以下の手順にしたがって添付のHotFixを適用してください。

1. 添付のファイルをダウンロードしてください(IOJ-1667248.zip)
2. 以下のファイルのファイル名を変更してください。

変更前: C:\Program Files (x86)\InstallShield\2014\Redist\Language Independent\i386\ISSetup.dll
変更後: C:\Program Files (x86)\InstallShield\2014\Redist\Language Independent\i386\ORIG_ISSetup.dll

3. 以下のファイルのファイル名を変更してください。


変更前: C:\Program Files (x86)\InstallShield\2014\Redist\Language Independent\i386\ISP\ISSetup.dll  
変更後: C:\Program Files (x86)\InstallShield\2014\Redist\Language Independent\i386\ISP\ORIG_ISSetup.dll

4. ダウンロードした
IOJ-1667248.zipを解凍し、上記の各フォルダに配置してください。
5. InstallShield2014 SP 1を起動してください。
6. プロジェクトを再ビルドしてください。


このHotFixを適用した後に、ロックされたファイルに上書きしようとするとCopyFile関数は正しいエラーコード0x80070020を返します。

Workaround

CopyFileの代わりに XCopyFile を使用することでも本問題を回避することができます。

Tags (1)
Attachments