Aracılığıyla paylaş


Özel Eylemlerde Hata İşleme

Windows Installer otomatik olarak dağıtımdaki hata işlemenin çoğunu yönetir; ancak özel eylemlerdeki hatalar bir yükleyicinin başarısız olmasına sebep olabilir. Hata işleme ile ilgili kod içeren tüm özel eylemler işlemin önemli bir parçasıdır. Örneğin, bir özel eylem dosya açan bazı kodları içeriyor ve dosya bulunamıyorsa, yüklemenin geri alınması için Windows Installer'a hatayı bildiren bir hata işleyicisi gereklidir.

Not

JScript veya VBScript kullanılarak yazılan özel eylemler için, Windows Installer'a hata döndürülmez ve yükleme geri alınamaz; kullanıcı için bir hata raporu görüntülenir Yükleme için kritik olan özel eylemler, hatayı Windows Installer'a geçirmek amacıyla Visual Basic, Visual C#, veya Visual C++ kullanılarak yazılmalıdır.

Hatayı Yakalayın

Özel eylemle bir hatayı işlemek için, hatayı yakalayıp bilgileri Windows Installer'a geri gönderen bir kod eklemeniz gerekir. Aşağıdaki örnekler, Visual Basic, Visual C#, Visual C++, JScript ve VBScript kodlarında bir hatayı nasıl işleyeceğinizi gösterir.

' 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;
}

Ayrıca bkz.

Diğer Kaynaklar

Dağıtımda Özel Eylemler Yönetimi