Kimse oturum açmadığında programı bilgisayar başlangıcında başlat ve birisi oturum açtığında pencereyi göster (OS: Windows)


19

Windows Server 2012'de Görev Zamanlayıcı kullanılarak sistem başlatılırken başlatılan bir programım var . Bilgisayar otomatik olarak yeniden başlatılsa bile program başlatılmalıdır.

Yönetici programı başlatmak için kullanılan hesaptır, görev için "Kullanıcının oturum açmış olup olmadığını çalıştır" seçeneği işaretlenir.

Buradaki sorun, nihayet birisi Uzak Masaüstü Bağlantısı kullanarak Yönetici olarak oturum açtığında arabirimin (program penceresi) gizlenmesidir.

Anladığım kadarıyla Görev Zamanlayıcı'yı kullanarak bunu çözmenin bir yolu yok.

Bunu Nasıl Çözebilirim?

Oldukça yaygın bir sorun olmalı ama net arayarak hiçbir şey bulamıyorum. Microsoft'un zamanlayıcılarında böyle bir sınırlamaya izin vermesinden çok şaşırdım. Bir VBScript veya başlangıçta çalışan ve kullanıcı gerçekten oturum açtığında görünecek olan programı başlatan bir şey yapabilir miyim?

Diğer fikirler?

(Bu arada orijinal programa bağlanan ayrı bir GUI-yalnızca program yapmak istemiyorum. Kullanıcı oturum açtıktan sonra zaten çalışan programı sonlandırmak ve sonra başlatmak zorunda kalmam da tercih ederim tekrar dene.)


2
Firedaemon, bir hizmet olarak uygulamayı yükleyin, RDPed zaman Firedaemon kullanarak "Oturum 0" geçmek. Uygulamayı görün.
TheCleaner

Bu, kendi hizmetinizi geliştirirseniz teknik olarak yapılabilir.
Ryan Ries

1
Sadece kendi sorumu yanıtladı. Ancak iki gün boyunca kendi cevabımı kabul edemiyorum, çünkü serverfault.com'daki sistem son derece kötü (çoğu insan şimdi iki gün beklemeden bu sayfayı terk edip soruyu sonsuza kadar çözülmemiş olarak işaretli bırakacaktı).
Marcus

2
@Marcus: Belirli suistimalleri kimin ne zaman ve ne zaman yapması gerektiğinin sınırları Ne yazık ki, bazen işleri doğru bir şekilde yapmaya yönelik gerçek girişimler için rahatsızlığa neden olurlar, ancak bazen bu tür tavizlerin yapılması gerekir. Durumu iyileştirebilecek bir öneriniz varsa (siteyi en azından korumakla birlikte gerçek kullanıcıları daha az rahatsız eden), ilgili bir "meta" sitesi ( meta.serverfault.com , meta) aracılığıyla düşünceyi yükseltmek daha iyi bir fikir olacaktır . stackoverflow.com ) bir yorumda site koşucularının görmesi çok olası olmadığından şikayet etmek yerine.
David Spillett

Oylamadan da görebileceğiniz gibi, kabul etmek istediğiniz cevap insanların onayladığı cevap değildir, çünkü bununla ilgili çaba göstermeye başlamak yanlıştır.
JamesRyan

Yanıtlar:


28

Bunu nasıl yapacağımı anladım. Bu biraz geçici bir çözüm ama almayı umduğum şey bu.

Dur! Henüz kandırmayın. Okumaya devam etmek...

  • Çalıştırın, Yönetici otomatik olarak oturum açacak şekilde ayarlayın.

  • Görev Zamanlayıcı'da bir görev oluşturun. Yalnızca kullanıcı (Yönetici) oturum açtığında çalışacak şekilde ayarlayın. Tetikleyici "oturum açıldığında" olur ve yalnızca Yönetici oturum açtığında bunu belirtir.

  • İkinci bir görev oluşturun. Yalnızca kullanıcı oturum açtığında çalıştırın, yönetici oturum açarken tetikleyin. Eylem "bir program başlat" ve program "user32.dll, LockWorkStation" olarak ayarlanmış argümanla "C: \ Windows \ System32 \ rundll32.exe" olmalıdır.

Bilgisayarı yeniden başlattığınızda şimdi olacak olan şey, Yöneticinin otomatik olarak oturum açması, başlatmak istediğiniz programın başlatılması ve iş istasyonunun kilitlenmesidir. Uzak Masaüstü Bağlantısı üzerinden oturum açarsam, program penceresini görebilir ve GUI'yi kullanabilirim. Bilgisayarı sorunsuz bir şekilde kilitleyebilir / kilidini açabilir ve istediğim gibi bağlantıyı kesebilir / yeniden bağlayabilirim. Sunucuya gidip gerçek iş istasyonunda oturum açmam da sorun değil. Yönetici zaten oturum açmış olduğundan görev tekrar çalışmaz (kaçamayacağınız sonsuz bir giriş kilidi döngüsü oluşturmaz).

Bu kadar basit. Otomatik oturum açtıktan sonra bilgisayar kilitlenmeden önce bir saniye süre verildi ve sanırım bilgisayara fiziksel erişimi olan profesyonel bir bilgisayar korsanı bu süre zarfında gizli bir şey yapabilirdi ama benim durumumda bu güvenlik riskini göz ardı edebilirim. Profesyonel bilgisayar korsanlarının evime girmesine izin vermediğim ve onlara bilgisayarı gösterdiğim sürece sistem nispeten güvenli olmalı. Her şeyden önce, süper kasa korumasına ihtiyaç duyan bilgisayarda çok fazla değer yok, bu yüzden bu çözümden oldukça memnunum.


7
Saygısızlık yok (ya da küçümseme), Marcus. Ama bu gerçekten aradığınız cevap türü ise, bu soru SuperUser için daha uygun olurdu .
Ryan Bolger

2
Bunu göndermek için hangi yığın değişimine karar vermek kolay değildi.
Marcus

Merhaba Marcus, Cevabınızı takip ettim ama GUI ile sadece bir tane değil, iki program başlatırken sorun yaşıyorum. 'Da bir soru gönderdim SuperUser. Eğer cevap verebilirseniz çok yardımcı olacak - superuser.com/questions/902386/…
user2162550

1
Aslında şu anda bunu aşağılamakta çünkü sorunun cevabı DEĞİLDİR. Soru, oturum açtığınız öğeyi açıkça tanımlar ve burada "çözümünüz" otomatik bir oturum açar (böylece birisi oturum açmış olur). Belki sorudaki akıllı fomülasyon değil, soru olduğu gibi.
TomTom

1
@TomTom Son kullanıcıya sunulan bir seçenek olarak "Kullanıcının oturum açmış olup olmadığını çalıştır" kesinlikle anlamına gelebilir "Başladığından emin olmak için burada bebek bakıcısı olmak zorunda değilsiniz."
Aryeh Leib Taurog

16

Windows Server 2012'de Görev Zamanlayıcı kullanılarak sistem başlatılırken başlatılan bir programım var. Bilgisayar otomatik olarak yeniden başlatılsa bile program başlatılmalıdır.

O zaman neden windows özellikleri tanımlandığı gibi bir sistem hizmeti yapmıyorsunuz?

Bunu Nasıl Çözebilirim?

Yapamazsın. Arka plan programlarının kullanıcı arayüzüyle etkileşime girmesi gerekmez. Veya: Kullanıcı arabirimi, daha sonra hizmete bağlanan kendi programını çalıştırmalıdır. Oturum açmış kullanıcının kullanıcı alanında çalışan kullanıcı arayüzü sunuyu yapar, windows hizmeti işlemeyi yapar. Model belki 15 yıl kadar böyle tasarlanmıştır.

Microsoft'un zamanlayıcılarında böyle bir sınırlamaya izin vermesinden çok şaşırdım.

Nedenini sormak için asla boğulmadığına daha çok şaşırdım.

Birden fazla sorun var:

  • Birden fazla kişi oturum açtığında, kullanıcı arayüzünü kim alır?
  • Kullanıcı oturumu kapattığında, programı öldürüyor musunuz? OUCH.
  • Güvenlik. Arka plan programı sınırlı haklar altında çalışabilir - kullanıcı arayüzünü kullanıcıya açıklamak, kullanıcının orada kod yürütebileceği anlamına gelir. Windows mesajlaşma modeli - ah - sorunları ile dolu.

Bu arada orijinal programa bağlanan ayrı bir GUI programı yapmak istemiyorum.

Ne ben ne de Microsoft bu noktada ne yapmak istediğinizi umursamıyor. Arka plan işlemeyi oturum açmış bir kullanıcı arayüzüne bağlamak için yerleşik ve desteklenen bir model vardır - onu kullanın ya da kullanmayın. Ancak olmadığınızda, koyduğunuz güvenlik sorunlarından şikayet etmeyin.


3
Amin. Keşke daha fazla uygulama satıcısı bu kavramı kavradı.
Ryan Bolger

15
Vay be senin tutumunda kibirli değil misin. Sanırım şanssızım. Yanlış bilgi sahibi olmadığınız ve birisinin bunu çözmenin bir yolu olmadığı sürece, herkes her şeyi bilemez, bu nedenle yayınınızın "yapamazsınız" kısmı ile yanlış olabilirsiniz. Herkesin paylaşabileceği nadir bir geçici çözüm olması durumunda soruyu bir süre daha fazla cevap için açık bırakmak istiyorum. Yoksa cevabını kabul edeceğim.
Marcus

Günümüzde Windows'un mevcut sürümlerinde bir hizmete bir kullanıcı arayüzü vermek giderek daha zordur, ancak imkansız değildir.
MDMoore313

Çoğunlukla güvenlik endişeleri nedeniyle aktif olarak istenmez. Buradaki ana sorun şudur - ve gerçekten almanız gerekir - arayüzümde bir pencere gösterirseniz, işleminizde kod yürütebilirim. Daha sonra size pencere mesajları gönderebilirim ve bu da istismar edilebilecek bir ton TON'a sahiptir. Normalde bir sorun değil - çünkü bir kullanıcı uygulamasıysa, sadece bir kullanıcı olarak yapabileceğim şeyleri yapabilirim .... ancak hizmet daha yüksek ayrıcalıklara sahipse, güvenlik kabusu gider. Bu yüzden bu yıllar önce kapatıldı ve programlama öğrenen ve belgeleri okuyan herkes bunu okumalıydı
TomTom

1
Gerçekten oraya gitmek istiyorsanız, coretechnologies.com/WindowsServices/FAQ.html#GUIServices içindeki adımları deneyebilirsiniz - hâlâ geçerli pencerelerde çalıştıklarından emin değilsiniz, ancak kullanıcı arayüzünü erişilebilir hale getirmenin ve tüm güvenlik sorunlarını açmanın yolları var .
TomTom

0

Her şey Sessionprogramınızın çalıştığıyla ilgili. Kimse giriş yapmadıysa, altında görüntülenecek etkileşimli bir oturum yok, altında çalıştığına inanıyorum Session 0, diğerleri gibi görünmeyen garip bir kullanıcı arayüzü var.

Şimdi, programınız ne zaman explorer.exebaşlatıldığını (veya kullanıcı girişini algılamanın başka bir yolunu) tespit ederse ve sihirli bir şekilde kendini yeniden biçimlendirdiğinde veya bu yeni oturum kimliğinde bir alt süreç oluşturduysa, giriş yapan herkes ne yaptığınızı mutlu bir şekilde görecektir.

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.