Nowy proces nie dostaje uprawnień admina

1

Mam aplikację, która jest generalnie instalatorem. Pobiera pliki, rejestruje biblioteki. Do rejestracji COMa wymagane są uprawnienia administratorskie. Do całej reszty - absolutnie nie. Wręcz użytkownik nie powinien uruchamiać aplikacji jako administrator, ponieważ nie będzie widział np. zmapowanych dysków (będzie je widział np. w konsoli administratora).

Oczywiście inaczej jest na systemach bez UAC. Tam jak użytkownik jest admin, to jest admin cały czas. Natomiast gdy użytkownik nie jest adminem, to musi poprosić admina o uruchomienie tylko tej części rejestrującej COMa, a pozostała część powinna się instalować na uprawnieniach użytkownika.

Skrótowo działanie instalatora:
Jeśli COM jest już zainstalowany, nie ma potrzeby podnoszenia uprawnień, instalacja idzie sobie dalej. Gdy nie ma uprawnień, próbuje uruchomić nowy proces z podniesionymi uprawnieniami. Nowy proces TYLKO rejestruje COMa. Jeśli się nie uda, to komunikat wołający administratora. Administrator uruchamia instalator z parametrem mówiącym, że to admin odpala, dzięki czemu instalator wie, że ma tylko zarejestrować COMa.

Ok, a teraz co mi nie działa:
Widnows 7, UAC włączone, użytkownik jest w grupie admimnistratorów.
Uruchamiam instalator normalnie (nie jako administrator), ten sprawdza uprawnienia, braknie mu, więc odpala nowy proces z parametrem i "runas". Nowy proces sprawdza czy ma uprawnienia administratorskie - i niestety nie ma, zwraca kod -1 :(
Dostaję komunikat, choć mam uprawnienia...

W manifeście:

<requestedExecutionLevel  level="asInvoker" uiAccess="false" />

Uruchomienie nowego procesu:

Process proc = new Process
{
StartInfo =
{
FileName = Process.GetCurrentProcess().Modules[0].FileName,
Arguments = "admin_install",
Verb = "runas",
UseShellExecute = false,
CreateNoWindow = true,
RedirectStandardOutput = true,
RedirectStandardError = true
}
};
proc.Start();
proc.WaitForExit();


Sprawdzenie, czy admin:
<code class="c#">
public static bool IsUserInAdministratorsGroup()
{
	bool isAdmin;
	try
	{
		WindowsIdentity user = WindowsIdentity.GetCurrent();
		WindowsPrincipal principal = new WindowsPrincipal(user);
		isAdmin = principal.IsInRole(WindowsBuiltInRole.Administrator);
	}
	catch (UnauthorizedAccessException ex)
	{
		isAdmin = false;
	}
	catch (Exception ex)
	{
		isAdmin = false;
	}
	return isAdmin;
}

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