インストールパッケージの自動インストールとアンインストール


背景:
プロジェクトの要件のため、パッケージをインストールする前に、古いバージョンのインストールをアンインストールする必要があります.では、どのようにして以前の古いバージョンのインストールパッケージをきれいにアンインストールすることができますか?
方法1:検索インストールパスを検索し、適切なフォルダを削除しますか?ショートカットを削除しますか?削除プログラムの追加に対応する項目を削除したり、installsheildが自分で生成したファイル、レジストリキー値などを削除したりしますか?漏れはありませんか.

方法2:削除プログラムを追加したように、きれいなアンインストールを行う方法はありますか?

始める前に、ここではまずInstallshieldの関数を紹介します.具体的には、Installshieldのマニュアルを参照してください.
構文:LaunchAppAndWait(szProgram,szCmdLine,lWait);

説明:LaunchAppAndWait関数は、szProgramによって指定されたszCmdLineで指定されたコマンドラインパラメータを持つアプリケーションを実行します.3番目のパラメータ、lWaitは、実行中のアプリケーションが終了するまでインストールを続行するかどうかを示します.

1つのインストーラはszProgramで指定されたアプリケーションのみを監視できます.アプリケーションが他のアプリケーションまたはプロセスを実行する場合、インストーラはそれらを監視できません.したがって、インストーラは、最初のアプリケーションによって実行された他のアプリケーションでも、最初のアプリケーションが終了した後も続行されます.注意実行中のアプリケーションの終了に失敗した場合、インストーラは実行中のアプリケーションの完了を無限に待機します.≪パラメータ|Parameters|ldap≫:szProgramは、実行するアプリケーションのファイル名を指定します.アプリケーションのフルパスとファイル名を指定することを推奨します.パスが含まれていない場合、InstallShieldはWindows API関数CreateProcessで使用される同じ検索順序を使用してファイルを配置します.ファイルがこれらの場所に見つからない場合、関数は失敗します.アプリケーションのフルネームに長いフォルダ名および/または長いファイル名が含まれている場合は、szCommandをLaunchAppAndWaitに渡す前にLongPathToQuoteに渡します.szCmdLine実行中のアプリケーションに渡すコマンドラインパラメータを指定します.コマンドラインパラメータのないアプリケーションを実行するために、空の文字列を渡します.lWaitは、インストールプログラムが続行する前に実行を待つアプリケーションの終了を指定します.このパラメータの場所に、次の事前定義定数の1つを渡します.NOWAIT:アプリケーションの実行後すぐにインストーラが続行することを指定します.アプリケーションはインストーラスクリプトと同時に実行されます.注意このパラメータを使用すると、関数LaunchAppを呼び出すのと同じです.WAIT:この関数によって実行されるアプリケーションが終了するまで、インストーラが待機する必要があることを指定します.
この関数を呼び出すことで、Installshieldのインストールアンインストールプロセスと組み合わせて、クリーンなアンインストールを実現できます.
LaunchAppAndWait(szPath,”/uninst”,LAAW_OPTION_WAIT_INCL_CHILD | LAAW_OPTION_WAIT);

ここで、szPathの内容は、関数RegDBGetKeyValueExにより、アンインストールされるProduct GUIDがレジストリの「SOFTWARE//Microsoft//Windows//CurrentVersion//Uninstall//Product GUID」の下にあるUninstallStringに対応するものを取得するものである.ここで、Product GUIDの値は、InstallsheildのInstallation Information/General InformationのProduct GUIDの値を表示する必要があります.

アンインストールする場合は、新しいインストールパッケージのインストール手順を続行するには、以前の古いインストールパッケージをアンインストールする必要があります.古いインストールパッケージをアンインストールしながら、新しいインストールパッケージをインストールすると、エラーが発生しやすく、許されない場合が多いです.この点、LaunchAppAndWaitメソッドを呼び出して古いバージョンのアンインストールが完了するのを待つときは、必ずLAAW_を付けることに注意してください.OPTION_WAIT_INCL_CHILDは、主にWindows Installがアンインストールプログラムを起動するため、Windows Installのサブプロセスが終了するまで待たなければならない.そうしないと、2つが同時に実行され、エラーが発生する可能性がある.

これにより、呼び出し後もすべてのFeatureを削除するかどうか、システムを再起動するかどうかを尋ねるダイアログボックスがポップアップされ、ユーザーが選択できることは間違いありません.では、上記の問題をどのように解決しますか?
まずインストールパッケージでプログラムをインストール、コマンドラインでインストールパッケージSetupを実行する.exeはパラメータ/rを与え、このとき起動したのは依然としてインタフェース操作のあるアンインストール操作であり、通常の操作方式でアンインストールを完了する.

前のステップが完了すると、システムのWindowsまたはWINNTフォルダの下にSetupが生成されます.issファイル、Setupに名前を変更できます.iss.uninstall.

スクリプトを使用して、このファイルをSetupにコピーします.exeの同じディレクトリの下で、ここではアンインストールスクリプトの呼び出しタイミングに注意し、OnFirstUIBeforeで行いますが、このときファイルのcopy動作は実現していませんので、Setupをiss.uninstallはまずsupportに追加し、関数XCopyFileを介してsetupに一時的にcopyを追加する.exeが存在するパスの下.

コードの選択は次のとおりです.

  RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);
 if (RegDBKeyExist("SOFTWARE//Microsoft//Windows//CurrentVersion//Uninstall//{D57D16E7-A863-4A65-A4AA-097E1632D154}") = 1)then if(AskYesNo("Installing this version will replace previous one and do you want to continue?",YES )=0) then exit; else uninstallDriverFunc(); szkey="SOFTWARE//Microsoft//Windows//CurrentVersion//Uninstall//{D57D16E7-A863-4A65-A4AA-097E1632D154}"; if (RegDBKeyExist(szkey) = 1)then // has the key RegDBGetKeyValueEx(szkey,"UninstallString",nvType,szPath,nvSize); VERCHEKER = SUPPORTDIR ^ "setup.iss"; XCopyFile ( VERCHEKER, "C://Program Files//InstallShield Installation Information//{D57D16E7-A863-4A65-A4AA-097E1632D154}", COMP_NORMAL ); szCMDLineTest = "/s /f1/"C://Program Files//InstallShield Installation Information//{D57D16E7-A863-4A65-A4AA-097E1632D154}//setup.iss/" "; LaunchAppAndWait( szPath, szCMDLineTest, LAAW_OPTION_WAIT_INCL_CHILD | LAAW_OPTION_WAIT); WaitForApplication(LAAW_PROCESS_INFORMATION.hProcess, LAAW_PROCESS_INFORMATION.dwProcessId, INFINITE, LAAW_OPTION_WAIT_INCL_CHILD | LAAW_OPTION_WAIT); endif; *        : - Setup.exe /s f1"Setup.iss.uninstall   " f2“        Log   ”      f2  log  ,   setup.exe        Setup.log   。                     ,               ,  ,      RegDBGetKeyValueEx   UninstallString                   。

では、インストールプロセスにも人工的な参加は必要ありませんか?インストールパッケージのインストールの自動化方法:
サイレントインストールパッケージの作成は、メインプログラムが完了する後に行う、サイレントスクリプトファイルを録画し、コマンドラインでインストールパッケージSetupを実行する.exeはパラメータ/rを与え、このとき起動するのは依然としてインタフェース操作のあるインストールであり、正常な操作方式でインストールを完了する.

前のステップが完了すると、システムのWindowsまたはWINNTフォルダの下にSetupが生成されます.issファイル(時間順に検索可能)、このファイルをSetup.exeの同じディレクトリにコピーし、Setup.iss.install(サイレントインストールスクリプト)と名前を変更します.

サイレントインストールパッケージの実行:1.Setup.exe/s f1”Setup.iss.installのパスf 2"サイレントインストールログを生成するパスを指定"f 2でlogパスを指定しないとsetupになります.exeはパスの下でSetupを生成する.logのファイル.

完了後、自動化にとって、インストールパッケージを自動的に取得し、ターゲットマシンにcopyして自動的に実行すると、インストールパッケージの自動インストールと自動アンインストールもこれによって実現できるのではないでしょうか.自動化テストには2つの説があることを知っています.
1つはTest Automationで、翻訳してテスト自動化と呼び、テストを自動化設計と実現する過程を重点的に説明する.
もう1つはAutomated Testing/Testで、翻訳して自動化テストと呼び、自動化テストツールを使用してテストを行い、スクリプトの録画/再生を通じてシステムをテストすることを重点的に説明します.このようなテストは通常、GUI、性能などのテストで多く使われています.
一般的に、インストールとアンインストールのプロセスはインタラクティブである必要がありますが、インストールパッケージの自動インストールと自動アンインストールを実現し、インストールパッケージの自動化を実現するにはどうすればいいのでしょうか.
実際の状況に応じて、スクリプトやプログラム、リファレンスを使用して、このような方法でインストールパッケージの自動インストールを実現し、その後、自動的に後続のテストを実行し、最後に自動アンインストールなどを完了することもできます.まだ何を待っているのか、早くやってみよう.