Spuštění externí aplikace s administrátorským oprávněním   otázka

C#

Dobrý den,

mám aplikaci, která si spouští externě svůj updater. Ve Windows 7 a 8 si spouští updater s klasickým dialogem s povolením spuštění aplikace. Problém je s verzí Windows XP, kde příkaz process.start() hlásí, že aplikace nebyla nalezena. Existuje nějaké řešení? Nebo ještě lépe aby se updater spustil automaticky s administrátorským oprávněním ve verzi XP, Windows 7 a Windows 8 bez potvrzovacího dialogu?

Kód pro spuštění updateru:

private void Button_Check_for_updates_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                ProcessStartInfo Monitor_Agent_instance = new ProcessStartInfo("Cloudiff Monitor Agent Updater.exe");
                Monitor_Agent_instance.Verb = "runas";
                Process.Start(Monitor_Agent_instance);
                Environment.Exit(0);
            }
            catch (Exception Exception)
            {
                System.Windows.MessageBox.Show(Exception.ToString(), "Cannot run Monitor Agent Updater");
            }
        }

Kód v manifestu updateru:

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Já to dělám tak, že kdokoliv může zkontrolovat dostupnost aktualizací, ale provést aktualizaci může pouze uživatel ze skupiny Administrators (kontroluje se členství pomocí My.User.IsInRole).

Pokud je program umístěn v Program Files, tak je pro zápis (aktualizace programu = zápis) vždy vyžadováno oprávnění Administrators. Jestliže uživatel není členem Administrators, potom buď dojde k vyjímce (vypnuté UAC), nebo zobrazení posraného dialogu (zapnuté UAC).

Pokud počítáte s tím, že uživatel bude vždy z Administrators (špatný přístup), můžete řídit úroveň obtěžování uživatele podle následující tabulky:

http://msdn.microsoft.com/en-us/library/...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Omlouvám se. Zdá se že chyba byla u mě. Stačilo jen upravit jeden řádek, a to takto:

ProcessStartInfo Monitor_Agent_instance = new ProcessStartInfo(Environment.CurrentDirectory+"\\Cloudiff Monitor Agent Updater.exe");

Zdá se, že verze XP správně nepochopila cestu k souboru. Má blbost. Neměl jsem na to spoléhat :) Ještě přidám na tlačítko klasickou ikonku se štítem, aby bylo jasné, že je potřeba administrátorských oprávnění.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Pěkná hovadina. Co když bude aktuální složka jiná než ta, kde se nachází spouštěcí soubor? Pokud má být aktualizační program ve stejné složce jako aplikace, použijte Assembly.GetExecutingAssembly.Location a Path.Combine s názvem aktualizačního programu.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback