Share via


Zpracování chyb ve vlastních akcích

Instalační služba systému Windows automaticky spravuje většinu chyb v nasazení, avšak chyby ve vlastních akcích mohou způsobit, že instalační program spadne. Všechny vlastní akce obsahují kód. Stejně jako s jakýmkoli jiným kódem, zpracování chyb je nezbytnou součástí procesu. Například pokud vlastní akce obsahuje kód, který otevře soubor a tento soubor chybí, je nutná obslužná rutina chyby, která nahlásí tuto chybu zpět programu Instalační služba systému Windows, aby bylo možné vrátit instalaci zpět.

Poznámka

U vlastních akcí, které jsou napsány pomocí jazyka JScript nebo jazyka VBScript, nebude chyba vrácena programu Instalační služba systému Windows a instalace nemůže být vrácena zpět. Uživateli může být zobrazeno okno s chybovou hláškou. Vlastní akce, které jsou pro instalaci kritické, by měly být napsány v jazyku Visual Basic, Visual C#, nebo Visual C++, aby bylo možné předat chybu do programu Instalační služba systému Windows.

Zachyťte chybu

Ke zpracování chyby ve vlastní akci, potřebujete přidat kód k zachycení chyby a předat informaci zpět programu Instalační služba systému Windows. Následující příklady ukazují, jak zpracovat chybu v kódu jazyka Visual Basic, Visual C#, Visual C++, JScript a jazyka VBScript:

' Uses System.IO and System.Configuration.Install
Dim Info As New FileInfo("MyFile.txt")
If Not Info.Exists Then
    Throw New InstallException("File does not exist")
End If
// Uses System.IO and System.Configuration.Install
FileInfo Info = new FileInfo("MyFile.txt");
if (Info.Exists == false)
   throw new InstallException("File does not exist");
'VBScript
msiMessageTypeError = &H01000000 
Set fso = CreateObject("Scripting.FileSystemObject")
If Not fso.FileExists("c:\MyFile.txt") Then
   Set record = Session.Installer.CreateRecord(0)
   record.StringData(0) = "File not found."
   Session.Message msiMessageTypeError, record
End If
var msiMessageTypeError = 0x01000000;
var fso = new ActiveXObject("Scripting.FileSystemObject");
if (!fso.FileExists("c:\\MyFile.txt"))
{
   var record = Session.Installer.CreateRecord(0);
   record.StringData(0) = "File not found.";
   Session.Message(msiMessageTypeError, record);
}
#pragma comment(lib, "msi.lib")

#include <windows.h>
#include <msiquery.h>

BOOL APIENTRY DllMain(HINSTANCE hInstance, DWORD fdwREason, LPVOID lpReserved)
{
   return TRUE;
}

extern "C" __declspec(dllexport) __stdcall Install(MSIHANDLE hInstall)
{
   if (GetFileAttributes(TEXT("c:\\MyFile.txt")) == -1)
   {
      PMSIHANDLE hRecord = MsiCreateRecord(0);
      MsiRecordSetString(hRecord, 0, TEXT("File does not exist."));
      MsiProcessMessage(hInstall, INSTALLMESSAGE(INSTALLMESSAGE_ERROR + MB_OK), hRecord);
      return ERROR_INSTALL_USEREXIT;
   }
   
   return ERROR_SUCCESS;
}

Viz také

Další zdroje

Správa vlastních akcí při nasazení