Başlangıçta Windows 7'de bir program otomatik olarak yönetici olarak nasıl çalıştırılır?


82

Çocuklarımın aktivitesini izlemek için kendi ebeveyn kontrolü uygulamamı oluşturdum. Uygulamanın tek GUI'si bir görev çubuğu simgesidir. Program yönetici olarak kurulur. Bu programın Windows başlangıcında yönetici kullanıcı olarak otomatik olarak başlatılmasını istiyorum, böylece standart kullanıcılar onu görev yöneticisinden öldüremez.

Şu adreste bir kayıt defteri anahtarı oluşturabilirim:

HKLM\Software\Microsoft\Windows\CurrentVersion\Run

Windows başladığında otomatik olarak çalışmasını sağlamak için. Sorun, programın oturum açan (standart) kullanıcı olarak başlatılmasıdır.

Yükseltilmiş bir modda çalışmasını nasıl sağlayabilirim? Bu Win7'de mümkün mü?


1
Belki daha büyük bir sorun, oturum açmış bir kullanıcı yoksa programın hiç başlatılmamasıdır. Bu, oturum açma sırasında bir programı çalıştırma mekanizmasıdır ( .loginUnix'teki komut dosyanız gibi ), önyükleme sırasında (bazı /etc/rc/...komut dosyaları gibi ) çalıştırılmaz.
Kaz

@Kaz: Bu soru bağlamında, bu bir sorun gibi görünmüyor (giriş ekranıyla çocukların etkileşimini gözlemlemeye çalışmadıkça)
Ben Voigt

Yanıtlar:


61

Bunu, bir kullanıcının oturum açtıktan sonra, o hesap tarafından başlatılan işlemlere sağlanan en yüksek ayrıcalıklara sahip sistemde yönetim erişimine sahip bir kullanıcı hesabı kullanarak başlatılacak şekilde görev zamanlayıcısına bağlamanız gerekir.

Bu, sıradan bir kullanıcı olarak oturum açarken yönetici ayrıcalıklarıyla işlemleri otomatik olarak başlatmak için kullanılan uygulamadır.

Düzgün çalışması için yükseltilmiş ayrıcalıklara ihtiyaç duyan ve bu nedenle kayıt defteri anahtarından düzgün şekilde başlatılamayan 'OpenVPN GUI' yardımcı sürecini başlatmak için kullandım.

Komut satırından, yapmak istediğiniz şeyin XML açıklamasından görevi oluşturabilirsiniz; Örneğin, sistemimden dışa aktarılan, oturum açtığımda en yüksek ayrıcalıklarla not defteri başlatacak olan bu var:

<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
  <RegistrationInfo>
    <Date>2015-01-27T18:30:34</Date>
    <Author>Pete</Author>
  </RegistrationInfo>
  <Triggers>
    <LogonTrigger>
      <StartBoundary>2015-01-27T18:30:00</StartBoundary>
      <Enabled>true</Enabled>
    </LogonTrigger>
  </Triggers>
  <Principals>
    <Principal id="Author">
      <UserId>CHUMBAWUMBA\Pete</UserId>
      <LogonType>InteractiveToken</LogonType>
      <RunLevel>HighestAvailable</RunLevel>
    </Principal>
  </Principals>
  <Settings>
    <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
    <DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
    <StopIfGoingOnBatteries>false</StopIfGoingOnBatteries>
    <AllowHardTerminate>true</AllowHardTerminate>
    <StartWhenAvailable>false</StartWhenAvailable>
    <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
    <IdleSettings>
      <StopOnIdleEnd>true</StopOnIdleEnd>
      <RestartOnIdle>false</RestartOnIdle>
    </IdleSettings>
    <AllowStartOnDemand>true</AllowStartOnDemand>
    <Enabled>true</Enabled>
    <Hidden>false</Hidden>
    <RunOnlyIfIdle>false</RunOnlyIfIdle>
    <WakeToRun>false</WakeToRun>
    <ExecutionTimeLimit>PT0S</ExecutionTimeLimit>
    <Priority>7</Priority>
  </Settings>
  <Actions Context="Author">
    <Exec>
      <Command>"c:\windows\system32\notepad.exe"</Command>
    </Exec>
  </Actions>
</Task>

ve aşağıdakileri kullanarak bir yönetici komut istemiyle kaydedilir:

schtasks /create /tn "start notepad on login" /xml startnotepad.xml

bu cevap aslında diğer yığın değişim sitelerinden birine taşınmalıdır, çünkü aslında kendi başına bir programlama sorusu değildir.


bilgi için çok teşekkür ederim. Deneyeceğim ve nasıl çalıştığını göreceğim.
newman

2
"bir kullanıcının oturum açtıktan sonra", "Windows başlangıcı" değildir.
Kaz

Evet, ancak oturum açana kadar kullanabileceğiniz bir masaüstünüz yok
Petesh

6
@Petesh, bu şekilde çalıştırmak için UI tabanlı bir uygulamayı nasıl edindiniz? Görev Zamanlamasını kullandığımda bir uygulamayı çalıştırabilirim ancak kullanıcı arayüzünü göremiyorum.
gonzobrains

Bunu kayıt defteri değişiklikleri yoluyla yapmanın herhangi bir yolu olup olmadığını merak ediyordum. Evet ise, işletim sistemi başlatılmadan (öncesinde) bile planlanabilir.
Sopalajo de Arrierez

40
schtasks /create /sc onlogon /tn MyProgram /rl highest /tr "exeFullPath"

2
Oturum 0'da çalışmayacak ve kullanıcı arayüzünü göremeyecek misiniz ?? Ben de aynı şeyi istedim ve yaptı ama kullanıcı adımla 0 oturumunda çalışıyordu ve bu nedenle kullanıcı arayüzü mevcut değildi
Gautam

4
"onlogon", Windows başlangıcı değildir.
Kaz

1
Windows 7'de kullanıcının masaüstünde çalışır. Calc.exe ile deneyin.
Vladimir Panteleev

1
@CyberShadow Bunu yönetici hakları gerektiren bir uygulamayla yapmaya çalışıyorum. Görev yöneticisinde görüyorum ama kullanıcı arayüzü görünmüyor.
gonzobrains

2
Cevap için teşekkürler. BT departmanımız kısa süre önce şirket etki alanımızdaki tüm bilgisayarlar için grup ilkesi aracılığıyla UAC'yi AÇIK duruma getirmeye zorladı. Ne yazık ki yönetici olarak bir komut istemi çalıştırırsanız, sürücü eşlemeleriniz kullanılamaz. Daha önce, tüm sürücü eşlemelerimi ayarlayacak olan "çalıştır" kayıt defteri anahtarı aracılığıyla oturum açma sırasında çalıştırmak için kısa bir .bat dosyası kurmuştum. Başlangıçta SYSTEM hesabı için benzer bir .bat çalıştırmanın bir yoluna ihtiyacım vardı. "schtasks / ru SYSTEM" tam da ihtiyacım olan şeydi.
Sente'de öl

15

Bu mümkün değil.
Ancak, bir yönetici kullanıcı altında çalışan bir hizmet oluşturabilirsiniz.

Hizmet, başlangıçta otomatik olarak çalışabilir ve mevcut uygulamanızla iletişim kurabilir.
Uygulamanın yönetici olarak bir şey yapması gerektiğinde, hizmetten bunun için yapmasını isteyebilir.

Aynı anda birden fazla kullanıcının oturum açabileceğini unutmayın.


hızlı cevap için çok teşekkür ederim. Aslında, uygulamayı bir Pencere Hizmetinden çalıştırmayı denedim, ancak çalışmasını sağlayamadım. Programı görev yöneticisinde görebiliyordum (SİSTEM kullanıcısı olarak), ancak simge görev çubuğunda görünmüyor. StartInfo'ya Verb = "runas" eklediğimde, "Bu komutu işlemek için yeterli depolama alanı yok" istisnası aldım. Sanırım bunun nedeni, kullanıcıdan onay istemesi için bir GUI açmanın bir yolu olmaması olabilir.
newman

8
@miliu: Bir hizmet kullanıcı ile etkileşim kuramaz. Birbiriyle iletişim kuran iki program yapmanız gerekiyor.
SLaks

6

Programları otomatik başlatmak için görev zamanlayıcıyı kullanmanın çok kullanıcı dostu olmadığını ve bazen benim için yan etkileri olduğunu düşünüyorum (örneğin, bir program için tepsi simgesi eklenmemiştir).

Bunu düzeltmek için, önce yönetici ayrıcalıklarıyla kendini yeniden başlatan, ardından bir dizindeki tüm dosyaları başlatan Elevated Startup adlı bir program yaptım. Yükseltilmiş Başlangıç ​​artık yükseltildiğinden, daha sonra başlattığı tüm programlara da yönetici ayrıcalıkları verilir. Dizin, klasik Başlangıç ​​dizininin yanındaki başlat menüsünde yer alır ve hemen hemen aynı şekilde çalışır.

UAC ayarlarınıza bağlı olarak, program kendini yeniden başlattığında bir UAC iletişim kutusu ile karşılaşabilirsiniz.

Programı buradan edinebilirsiniz: https://stefansundin.github.io/elevatedstartup/


bu son cevap olduğu için bir yorum eklemek istiyorum. Windows 10'da görev zamanlayıcı kullanarak programımla OP ile aynı şeyi yapmaya çalışıyorum. Ancak, programımı istediğim gibi olmayan arka plan işlemi olarak başlatıyor. Uygulamamın normal olarak yönetici olarak başlamasını istiyorum. Programınız bunu hesaba katıyor mu?
THN

Ben olacağına inanıyorum. Program, kısayola sağ tıklamış ve "Yönetici ayrıcalıklarıyla çalıştır" ı kullanmışsınız gibi başlamalıdır. İstediğiniz gibi davranmazsa, kullanım durumunuz hakkında daha fazla bilgi almaktan ve programın sizin için çalışmasını sağlamaktan memnuniyet duyarım.
stefansundin

3

Uygulamanızın uyumluluğunu yönetici olarak ayarlama (Run theprogram as an administrator).

Takın task scheduler, sonra kapatın UAC.


Ben de aynı sorunu yaşıyorum. UI görünmüyor. Herhangi bir yardım
Senthil Muthiah

1
@SenthilMuthiah Bunun nedeni, programınızın bir uygulama olarak değil bir arka plan işlemi olarak çalıştırılmasıdır. Bana da aynı şey oldu.
THN

3

Bunu, TaskSchedler kitaplığı aracılığıyla yönetici olarak çalışırken görevi yükleyerek yapabilirsiniz . Burada .NET / C # 'nin ilgili sorularınız için uygun bir platform / dil olduğu varsayımını yapıyorum.

Bu kitaplık, Görev Zamanlayıcı API'sine ayrıntılı erişim sağlar, böylece schtasksbaşlangıç ​​önceliği gibi çağırarak komut satırı aracılığıyla başka türlü ayarlayamayacağınız ayarları değiştirebilirsiniz . Bir ebeveyn denetimi uygulaması olarak, schtasksvarsayılan olarak 7 önceliğini oluşturan 0 (maksimum) başlangıç ​​önceliğine sahip olmasını istersiniz .

Aşağıda, istenen uygulamayı oturum açma sırasında süresiz olarak yönetici olarak çalıştırmak için uygun şekilde yapılandırılmış bir başlangıç ​​görevinin kurulmasına ilişkin bir kod örneği verilmiştir. Bu kod, çalıştığı işlem için bir görev yükleyecektir.

/*
Copyright © 2017 Jesse Nicholson  
This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this
file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/

/// <summary>
/// Used for synchronization when creating run at startup task.
/// </summary>
private ReaderWriterLockSlim m_runAtStartupLock = new ReaderWriterLockSlim();

public void EnsureStarupTaskExists()
{
    try
    {
        m_runAtStartupLock.EnterWriteLock();


        using(var ts = new Microsoft.Win32.TaskScheduler.TaskService())
        {
            // Start off by deleting existing tasks always. Ensure we have a clean/current install of the task.
            ts.RootFolder.DeleteTask(Process.GetCurrentProcess().ProcessName, false);

            // Create a new task definition and assign properties
            using(var td = ts.NewTask())
            {
                td.Principal.RunLevel = Microsoft.Win32.TaskScheduler.TaskRunLevel.Highest;
                // This is not normally necessary. RealTime is the highest priority that
                // there is.
                td.Settings.Priority = ProcessPriorityClass.RealTime;
                td.Settings.DisallowStartIfOnBatteries = false;
                td.Settings.StopIfGoingOnBatteries = false;
                td.Settings.WakeToRun = false;
                td.Settings.AllowDemandStart = false;
                td.Settings.IdleSettings.RestartOnIdle = false;                    
                td.Settings.IdleSettings.StopOnIdleEnd = false;
                td.Settings.RestartCount = 0;                    
                td.Settings.AllowHardTerminate = false;
                td.Settings.Hidden = true;
                td.Settings.Volatile = false;
                td.Settings.Enabled = true;
                td.Settings.Compatibility = Microsoft.Win32.TaskScheduler.TaskCompatibility.V2;
                td.Settings.ExecutionTimeLimit = TimeSpan.Zero;

                td.RegistrationInfo.Description = "Runs the content filter at startup.";

                // Create a trigger that will fire the task at this time every other day
                var logonTrigger = new Microsoft.Win32.TaskScheduler.LogonTrigger();
                logonTrigger.Enabled = true;                    
                logonTrigger.Repetition.StopAtDurationEnd = false;
                logonTrigger.ExecutionTimeLimit = TimeSpan.Zero;
                td.Triggers.Add(logonTrigger);

                // Create an action that will launch Notepad whenever the trigger fires
                td.Actions.Add(new Microsoft.Win32.TaskScheduler.ExecAction(Process.GetCurrentProcess().MainModule.FileName, "/StartMinimized", null));

                // Register the task in the root folder
                ts.RootFolder.RegisterTaskDefinition(Process.GetCurrentProcess().ProcessName, td);
            }
        }                
    }
    finally
    {
        m_runAtStartupLock.ExitWriteLock();
    }
}

Bu kaygan bir kitaplık - Yine de sadece bir not. Bir şeyi "gerçek zamanlı" çalıştırmak çoğu zaman gerekli değildir. Ve tdbeni bu yönde gösterdiğin için asla teşekkür etmiyorsun .
Andy

1
@Sonic Elden çıkarma ile ilgili ipucu için teşekkürler. Haklısın, "gerçek zamanlı" normalde gerekli değildir. Bu kod yazdığım açık kaynak kodlu bir web içeriği filtresinden kopyalandı, bu yüzden bir an önce başlatılması gerekiyor.

2

FarmComm adlı yazdığım bir program bunu çözebilir. Açık kaynak ve Kamusal Alan olarak yayınladım.

Kriterlerinizi karşılamıyorsa, bunu yapmak için kolayca değiştirebilirsiniz.

farmComm:

  • Kullanıcılar oturum açıp kapandığında devam eden bir hizmet altında açılışta çalışır.
    • Oturum 0'da
    • "NT AUTHORITY \ SYSTEM" kullanıcısı altında.
  • Keyfi süreçleri ortaya çıkarır (siz seçersiniz);
    • Ayrıca Oturum 0'da
    • "Görünmez" veya herhangi bir kullanıcı arayüzü / GUI göstermeden
    • Grafik donanımına erişim ile (örneğin GPU'lar).
    • Güvenli Masaüstü dahil, değişse bile etkin oturuma yanıt verir. Bu nasıl:
    • İşlemleri yalnızca bir kullanıcı 8,5 dakika boşta kaldıktan sonra ortaya çıkarır
    • Bir kullanıcı boşta kaldığında ortaya çıkmaları sonlandırır

Kaynak komut dosyalarına buradan ulaşılabilir:

https://github.com/r-alex-hall/farmComm


2

Bir işlemi yönetici düzeyinde bir kullanıcı veya Hizmet olarak çalıştırmanın güvenlik sonuçlarını da göz önünde bulundurmalısınız. Herhangi bir giriş, örneğin bir ağ arayüzünde dinliyormuş gibi, doğru şekilde doğrulanmıyorsa. Bu giriş için ayrıştırıcı düzgün bir şekilde doğrulanmazsa, kötüye kullanılabilir ve muhtemelen yükseltilmiş kullanıcı olarak kod çalıştırabilecek bir istismara yol açabilir. abatishchev'in örneğinde bu çok fazla sorun olmamalı, ancak bir kurumsal ortamda konuşlandırılacaksa, geniş ölçekli dağıtımdan önce bir güvenlik değerlendirmesi yapın.


Bazı programlar yükseltme gerektirir ve mutlaka güvenlik sorunlarına tabi değildir. Örneğin, sistem sıcaklığını izleyen ve bunu bildirim alanında görüntüleyen bir programın donanıma erişmek için yükseltilmesi gerekir ve otomatik çalıştırılması gerekir, ancak güvenlik bunun için bir noktadır.
Synetech

-3

Bence görev zamanlayıcı aşırıya kaçar (imho). Win7 için bir başlangıç ​​klasörü var.

C: \ Kullanıcılar \ miliu \ AppData \ Roaming \ Microsoft \ Windows \ Başlat Menüsü \ Programlar \ Başlangıç

Otomatik başlatma Uygulamanız için bir kısayol oluşturun, kısayolun özelliklerini düzenleyin ve her zaman yönetici olarak çalışmasını sağlayın.

Çocuklarınız elbette kapatabilir, ancak teknolojiden anlıyorlarsa sizi dışarıda tutmanın bir yolunu her zaman bulurlar. Gençken yaptığımı biliyorum.

İyi şanslar!


6
Bu işe yaramayacak. Windows, Yönetici olarak çalışacak şekilde ayarlanmış Başlangıç ​​kısayollarını yok sayacaktır.
Vladimir Panteleev

Gerçekten mi? Denedin mi? Çünkü benim tarafımda iyi çalışıyor. Surround sesin çalışması için LogitechSoundManager'ımı Yönetici olarak otomatik başlatmam gerekiyor ...
zhengtonic

Ben de bu sorunu yaşıyorum, başlangıç ​​klasöründeki kısayollarda "yönetici olarak çalıştır" seçeneği işaretlenmiş olsa da, yine de başlangıçta yüklenmiyorlar. Bunu düzeltmenin herhangi bir yolunu bilen var mı?
ycomp

2
CyberShadow haklıydı, bilgisayarın UAC'si kapalıydı. Yönetici olarak başlangıç ​​kısayolları çalışmıyor ... biri taskcheduler'ı kullanmak zorunda
zhengtonic

En azından Windows 10'da bunun işe yaramadığını buldum. @ Vladimir-panteleev'in dediği gibi, Windows bunu görmezden geliyor gibi görünüyor.
E. van Putten
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.