1

次のテストInstallScriptInstallShieldコードがあります。これは、通常の対話モードでは正しく実行されますが、実際のディレクトリの深さを含むChangeDirectorysetup.exe /sの呼び出しで(サイレント)モードでクラッシュします。

//Note: "C:" ^ "temp" resolves to "C:\temp", but it never successfully 
//executes when run silent mode. It works fine in interactive mode, however.
ChangeDirectory("C:" ^ "temp");
//No subsequent code gets executed at this point in silent mode 

これは、Windows 2008x64サーバーの管理者権限を持つコマンドウィンドウで実行しています。c:\tempディレクトリが存在し、そのディレクトリEVERYONEに対する完全な制御権が付与されています。

終了コードは-2147213312、に対応するエラーガイド0x80042000にあります。

エンドユーザーがインストールをキャンセルしたため、インストールはabortキーワードで終了しました。

ここで何が起こっているのでしょうか?構文を使用してエラーを調べようとしましたtry/catchが、この場合、catchブロックは実行されず、エラーはないと主張しているように見えますが、代わりにabort呼び出されますか?

4

2 に答える 2

1

Installscript エンジンは、舞台裏で多くのことを行っています。作業ディレクトリを変更し続けます。したがって、ChangeDirectory() の使用はあまり信頼できません。すべての実行可能ファイルおよびその他のファイルに FULL PATH を使用することをお勧めします。LaunchAppAndWait() にもこの問題があります。そのため、必ずフルパスを使用する必要があります。

さらに、ChangeDirectory() の Installshield ヘルプには、次のことが明確に記載されています。

スクリプトでファイルを指定するときは、適切な値を持つ現在のフォルダーに依存するのではなく、(SRCDIR などの適切な InstallShield システム変数を使用して) 常にフル パスを指定します。スクリプトは、現在のフォルダーを変更できるコードを内部的に実行するため、その値は期待したものとは異なる場合があります。

問題は、結果が信頼できないということです。それらは機能する場合と機能しない場合があります。

于 2013-03-18T07:45:05.127 に答える
0

このエラーコードは、記録された.issファイルに.iss応答ファイルのエントリがない場合に発生します。

詳細については、応答ファイルの作成を参照してください。

installscriptセットアップをログに記録しても多くの情報が得られなかったため、カスタムログファイルに書き込む関数をいくつか作成しました。これは非常に役立ちました。

于 2012-10-26T11:23:39.670 に答える