Zosobnění uživatele v kódu může způsobit Outlook přestane reagovat nebo způsobit chybové zprávy "Metoda nepodařilo"

Podpora Office 2003 byla ukončena.

Společnost Microsoft ukončila dne 8. dubna 2014 podporu Office 2003. Tato změna ovlivnila aktualizace softwaru a možnosti zabezpečení. Další informace o tom, co to pro vás znamená a jak zajistit ochranu

Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.

Projděte si také anglickou verzi článku:821470
Tento článek byl archivován. Je nabízen v takovém stavu, v jakém je, a nebude již nadále aktualizován.
Příznaky
Při spuštění kódu, který zosobňuje uživatele o přístup k poštovní schránce aplikace Microsoft Office Outlook 2007, Outlook 2003 nebo Outlook 2002 přestat reagovat nebo se může zobrazit chybová zpráva podobná následující:
Metoda '~' objektu '~' se nezdařila
Příčina
Tento problém může dojít, pokud nové podprocesy jsou vytvořeny při zosobnit uživatele. MAPI a objekty CDO (Collaboration Data OBJECTS) vytvářet nové podprocesy jako normální funkce a tyto nové podprocesy dědit úplný přístup k tokenu zosobněného uživatele.

Poznámka: Zosobnění s MAPI není podporované chování.
Jak potíže obejít
Společnost Microsoft poskytuje ukázky programování pouze pro ilustraci, bez žádné záruky výslovně uvedené nebo odvozené,. včetně, bez omezení, odvozených záruk vztahujících se k obchodovatelnosti nebo vhodnosti pro určitý účel. Tento článek předpokládá, že uživatel je obeznámen s programovacím jazykem, který je předmětem ukázky, a s nástroji použitými pro vytvoření a ladění skriptu. Pracovníci technické podpory společnosti Microsoft mohou vysvětlit funkce určité procedury,. nemohou však následující příklady rozšířit o další funkce nebo vytvářet procedury podle konkrétních požadavků uživatele.

Chcete-li tento problém vyřešit, rozdělit na dva samostatné programy váš kód.

For example, the first program should do the impersonation by using LogonUser, and then start the second program as a separate process by using CreateProcessAsUser as in the following sample Visual Basic code:
'<-- Launcher programConst LOGON32_LOGON_INTERACTIVE = 2Const LOGON32_PROVIDER_DEFAULT = 0Const CREATE_DEFAULT_ERROR_MODE = &H4000000Private Type STARTUPINFO   cb As Long   lpReserved As Long ' !!! must be Long for Unicode string   lpDesktop As Long  ' !!! must be Long for Unicode string   lpTitle As Long    ' !!! must be Long for Unicode string   dwX As Long   dwY As Long   dwXSize As Long   dwYSize As Long   dwXCountChars As Long   dwYCountChars As Long   dwFillAttribute As Long   dwFlags As Long   wShowWindow As Integer   cbReserved2 As Integer   lpReserved2 As Long   hStdInput As Long   hStdOutput As Long   hStdError As LongEnd TypePrivate Type PROCESS_INFORMATION   hProcess As Long   hThread As Long   dwProcessId As Long   dwThreadId As LongEnd TypePrivate Declare Function CreateProcessAsUser Lib "advapi32.dll" _      Alias "CreateProcessAsUserA" _      (ByVal hToken As Long, _      ByVal lpApplicationName As Long, _      ByVal lpCommandLine As String, _      ByVal lpProcessAttributes As Long, _      ByVal lpThreadAttributes As Long, _      ByVal bInheritHandles As Long, _      ByVal dwCreationFlags As Long, _      ByVal lpEnvironment As Long, _      ByVal lpCurrentDirectory As String, _      lpStartupInfo As STARTUPINFO, _      lpProcessInformation As PROCESS_INFORMATION) As LongPrivate Declare Function LogonUser Lib "advapi32.dll" Alias "LogonUserA" ( _      ByVal lpszUsername As String, _      ByVal lpszDomain As String, _      ByVal lpszPassword As String, _      ByVal dwLogonType As Long, _      ByVal dwLogonProvider As Long, _      phToken As Long) As LongPrivate Declare Function CloseHandle Lib "kernel32" ( _      ByVal hObject As Long) As LongPrivate Sub Command1_Click()      Dim hToken As Long      Dim ulResult As Long      Dim startup As STARTUPINFO      Dim process As PROCESS_INFORMATION          ulResult = LogonUser("ImpersonatedUsed", "ImpersonatedDomain", _         "ImpersonatedUserPassword", LOGON32_LOGON_INTERACTIVE, _            LOGON32_PROVIDER_DEFAULT, hToken)      If ulResult = 0 Then         MsgBox "Error in LogonUser:  " & Err.LastDllError         Exit Sub      End If      startup.cb = Len(startup)      'TODO: Replace 'mail.exe' with the name of the program you wish to start      ulResult = CreateProcessAsUser(hToken, 0&, "mail.exe", 0&, 0&, _         False, CREATE_DEFAULT_ERROR_MODE, 0&, "path", startup, process)      If ulResult = 0 Then         MsgBox "Error in CreateProcessAsUser:  " & Err.LastDllError         Exit Sub      End If          CloseHandle hToken    End Sub'<-- End of first program '<-- Start of second process'<-- Mail.exe project:Private Sub Command1_Click()On Error GoTo ErrHandler   Dim oSession 'As MAPI.Session   Set oSession = CreateObject("MAPI.Session")   oSession.Logon , , , , , True, "ServerName" & vbLf & "MailboxName"   Dim oFolder 'As MAPI.Folder   Set oFolder = oSession.GetDefaultFolder(1) 'CdoDefaultFolderInbox   Set oMessages = oFolder.Messages   Set oMessage = oMessages.GetFirst   MsgBox oMessage.Subject   Set oMessage = Nothing   MsgBox "1"   Set oMessages = Nothing   MsgBox "2"   Set oFolder = Nothing   MsgBox "3"   oSession.Logoff  '   MsgBox "4"      Set oSession = Nothing   MsgBox "Done"   Exit Sub    ErrHandler:   MsgBox Err.Number & "   -->   " & Err.Description   Set oMessage = Nothing   Set oMessages = Nothing   Set oFolder = Nothing   oSession.Logoff   Set oSession = NothingEnd Sub
Prohlášení
Společnost Microsoft potvrzuje, že se jedná o problém v produktech této společnosti, které jsou uvedeny v části Informace v tomto článku jsou určeny pro produkt.
OFFQFE 8382

Upozornění: Tento článek je přeložený automaticky

Vlastnosti

ID článku: 821470 - Poslední kontrola: 01/11/2015 22:49:44 - Revize: 2.1

Microsoft Outlook 2002 Standard Edition, Microsoft Office Outlook 2003, Microsoft Office Outlook 2007

  • kbnosurvey kbarchive kbmt kberrmsg kbbug kbprb KB821470 KbMtcs
Váš názor