FileNotFoundException przy rejestracji COMa - gdzie jest plik?

0

Kontekst problemu jest opisany tu: Nowy proces nie dostaje uprawnień admina

Dzieje mi się dziwna rzecz. W instalatorze uruchamiam nowy proces na uprawnieniach admina i rejestruję COMa pod pewną konkretną ścieżką. Sprawdzam czy COM się poprawnie załadował:

public static bool IsCOMInstalled(string name)
{
try
{
var type = Type.GetTypeFromProgID(name, true);
var obj = Activator.CreateInstance(type);
return true;
}
catch (Exception e)
{
return false;
}
}

Gdzie name to nazwa konkretnej klasy w bibliotece, np. TestCOM.TestTools. Póki jesteśmy w instancji admina, powyższy kod zwraca true.
Wracamy do instancji użytkownika. Tu chcę sprawdzić, czy się udało zarejestrować COM, więc znów sprwadzam tą samą funkcją. Tym razem jednak dostaję FileNotFoundException:

> Pobranie fabryki klasy COM dla składnika o identyfikatorze CLSID {26BA8F3C-841E-449A-A3ED-6354BF9CD0B2} nie powiodło się z powodu następującego błędu: 80070002.


...a najciekawsze jest to, że gdy wyłączę program i uruchomię instalację ponownie, to już COMa widzi. Ale jeśli go wyrejestruję, to cyrk dziej się od nowa.

O co tu chodzi? File.Exists(LibsPath + "\\TestCOM.dll") zwraca true. Być może... nie mam pojęcia czemu... ale może... COM zarejestrował się gdzie indziej...? Jak sprawdzić, gdzie?

Jak sprawdzić, który plik spowodował FileNotFoundException?
0

Jeśli procesy admina i usera są skompilowane na inną architekturę (x86 vs x64) to ścieżki c:\windows\system32 i c:\program files są przekierowywane do innych fizycznych folderów.

0

Dodam, że zgodnie z dokumentacją: http://msdn.microsoft.com/pl-pl/library/system.io.filenotfoundexception.filename.aspx
nazwa tego pliku, który spowodował wyjątek, powinna znajdować się we właściwości FileName.

U mnie, właściwość ta ma wartość null o.O

0

no jak go nie ma to jest null :p :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1