Domanda

Leggendo varie proprietà dei risultati della raccolta Outlook.MAPIFolder.Items in un errore quando le autorizzazioni degli utenti non sono sufficienti, ad esempio, se la cartella è visibile ma non sfogliabile.

La descrizione di errore è: Non c'è bisogno di autorizzazioni sufficienti per eseguire questa operazione su questo oggetto. Vedere il contatto di cartella o l'amministratore di sistema.

Volevo trappola che l'errore in questo modo (in Outlook 2003):

Sub MySub(StartFolder As Outlook.MAPIFolder)

...

On Error GoTo ErrHandler
If (StartFolder.Items.Count = 0) Then Exit Sub 'this really is a permission test'
On Error GoTo 0

...

ErrHandler:
  If ((Err.Number <> 0) And (Err.Number <> -2114519035)) Then
Call MsgBox("Error " & Err.Number & ": " & Err.Description, vbExclamation + vbOKOnly, StartFolder.Name, _
            Err.HelpFile, Err.HelpContext)
...
End Sub

Test mio gestore degli errori, ho trovato un altro numero di errore con la stessa descrizione ... e l'elenco è cresciuto rapidamente a 62 errori con la stessa descrizione! Err.Number varia da -2.114,519035 millions a -1.638.395. Tutti i numeri di errore sembrano FFxxx70005 in esadecimale.

Perché c'è Err.Number multiple per lo stesso Err.Description? Come ti intercettare questi errori, e solo loro, facilmente? È l'errore esadecimale struttura di numero caratteristico di questo errore?

Oh, e non mi piace l'idea di testare la descrizione (troppo locale- e versione specifica).

È stato utile?

Soluzione

Questo numero errore sembra un HRESULT -. Consultare la pagina per HRESULT su Wikipedia

Il pezzo che è diversa per te, che hai contrassegnato come xxx, è lo "Strumento", o in altre parole, che parte di Windows sta tornando l'errore.

L'errore effettivo è nelle 16 bit di fondo, o 0x00005 nel tuo caso, che significa "accesso negato". I valori che vedi sono tutti i diversi modi in cui Windows può dire "Accesso negato", per esempio. "Accesso negato a un file", "Accesso negato al negozio certificato", "Accesso negato a un servizio di rete", ecc.

Prendere i 16 bit inferiori del errore e confronta con 5 per intercettare tutti i casi in cui "i permessi dell'utente sono insufficienti".

Altri suggerimenti

Credo che questo sia perché l'operazione richiesta è composto, cioè, richiede più chiamate alle varie interfacce COM, ognuno dei quali può restituire un HRESULT diverso descrive un errore che si è verificato in quel piccolo passo. Il metodo cerca racchiudono per generare un messaggio più user-friendly, quindi in caso di qualsiasi errore dà la stessa stringa di errore (che di solito è una buona cosa da fare, usabilità-saggio). Allo stesso tempo, il codice di errore COM originale è conservato nel caso qualcuno si sarebbe preso cura.

Credo che in questo caso il meglio che puoi fare è fare lo stesso, vale a dire, dando la stessa stringa user-friendly per tutti i codici di errore.

Se si vuole realmente analizzare i codici di errore, si desidera Struttura dei codici di errore COM .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top