Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Windows 7/8.1 64b spuštění aplikace s admin. oprávněním

Hej. Musím si už zajít koupit něco na zub.

Dobře jsem si zařádil. Z části nízkoúrovňové programování a kombinace obou dohledaných přístupů.

MISSION ACCOMPLISHED.

Takže... stručně se to mělo asi takhle.
K tomu, abyste mohli spustit program, jako správce z aplikace je možno jej zařadit do plánovače.

Ale k tomu, abyste zase mohli spustit ten plánovač potřebujete spustit úlohu z procesu s uloženým vyšším oprávněním.

Takže z CMD ta fíčura vypadá asi takto:
(heslo si vyžádá jen při prvním spuštění)

runas.exe /noprofile /savecred /user:Admin "schtasks.exe /run /tn sluzba_s_absolutnim_opravnenim"
No... a když chcete tuhle parádu spustit z aplikace (třebas) C# .NET tak... to může vypadat takhle:

 System.Diagnostics.Process p = new System.Diagnostics.Process();
        ProcessStartInfo startInfoHeavyFire = new ProcessStartInfo(@"d:\games\hra\hra.exe");
       // ProcessStartInfo startInfoHeavyFire = new ProcessStartInfo(@"");
        
        System.Diagnostics.Process t = new System.Diagnostics.Process();
        ProcessStartInfo startInfoTrainerHeavyFire = new ProcessStartInfo("runas.exe", "/noprofile /savecred /user:Administrátor \"schtasks.exe /run /tn sluzba_s_absolutnim_opravnenim\"");

        //nasledně třebas

  p.StartInfo = startInfoHeavyFire;
               
                p.Start();
                Thread.Sleep(10000);

            
                startInfoTrainerHeavyFire.WorkingDirectory = Environment.CurrentDirectory;
                startInfoTrainerHeavyFire.UseShellExecute = false;
                
                t.StartInfo = startInfoTrainerHeavyFire;  // nastartování procesu s max. oprávněním z aplikace se standardním
                t.Start();


Možná to jde nějak jednodušeji. Ale tohle funguje.
Službu jsem nastavil na spuštění s parametry 1x v minulosti (tím se sama nikdy a ani periodicky nezapne).
A vypadá takhle:
http://pc.poradna.net/file/view/20412-vlast-sluzby -jpg

Pakliže potřebujete nastavit focus externí aplikaci, na kterou máte handle např. přes
process start (uvedený), dá se použít (unmanaged) todle:

 [DllImport("User32.dll", SetLastError = true)]
 static extern void SwitchToThisWindow(IntPtr hWnd, bool fAltTab);
 
// následně:

 t.Start();
 Thread.Sleep(5000); // Nějaké to zpoždění
 SwitchToThisWindow(p.MainWindowHandle, true); // p je pointer na proces z předchozí ukázky          
Takže tenhle příspěvek řeší hlavně způsob, jak z vlastní aplikace spustit aplikaci externí s vyšším oprávněním bez hesla.

A funguje to i na W8.1

Reakce na odpověď

1 Zadajte svou přezdívku:
2 Napište svou odpověď:
3 Pokud chcete dostat ban, zadejte libovolný text:

Zpět do poradny