Kontekst problemu jest opisany tu: http://4programmers.net/Forum/C_i_.NET/223889-nowy_proces_nie_dostaje_uprawnien_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?