Come funziona COM CoCreateInstanceEx cercare di tipi di carico (per l'utente win non-admin)?

StackOverflow https://stackoverflow.com/questions/4595190

  •  15-10-2019
  •  | 
  •  

Domanda

Ho un problema molto complicato che si verifica solo per gli utenti di Windows non-admin.

ho eseguito uno script S che risiede sul desktop e chiama una funzione in una DLL C ++. Poi il flusso è la seguente:

  1. Il mio C ++ dll crea un processo di Delfi, l'invio di un GUID come un parametro.
  2. Al momento dell'inizializzazione, il mio processo di Delfi registra una classe C con il dato GUID utilizzando una fabbrica oggetto COM.
  3. Il mio C ++ DLL tenta di chiamare CoCreateInstanceEx con lo stesso GUID. ==> L'operazione non riesce con HResult 0x80029c4a Errore caricamento della libreria / DLL.

Non viene generata un'eccezione da parte di Delphi - registrazione sembra funzionare senza intoppi.

ho usato monitor di processo e sega con mia grande sorpresa che, quando CoCreateInstanceEx si chiama, v'è un tentativo di leggere il mio file exe Delphi da una posizione sbagliata. Invece di cercare di accesso in cui è registrato l'exe, c'è un tentativo di accesso al exe dal desktop, in cui lo script S risiede, e, naturalmente, l'exe non c'è.

Questo accade solo per utenti non-admin. Inoltre, se un utente amministratore mai eseguire questo script prima, funziona perfettamente bene per il non-admin.

Ora cerco di capire perché questo sta accadendo. Questo è il motivo per cui cerco di capire il flusso di CoCreateInstanceEx. Non ho trovato alcuna informazione utile sul web. Quindi, come fa CoCreateInstanceEx cerca di caricare i tipi? Dove si tenta di guardare? Avete qualche idea di come la situazione descritta può accadere?

Qualsiasi informazione o idea sarà molto apprezzato!

È stato utile?

Soluzione

Risulta che l'exe del processo di Delphi è stato registrato con il percorso relativo al posto di percorso completo.

Non sono ancora sicuro perché per utente admin ha funzionato correttamente ... Quindi, se qualcuno ha un'idea sarò interessato a conoscere.

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