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