Herhangi bir windows uygulamasının birden çok örneğini çalıştırma


11

Bazı yazarların Windows uygulamasını tek örnek olmaya zorladığını varsayalım. Bu uygulamanın birden çok örneğini oluşturmanın herhangi bir yolu var mı (sanal makinenin içinde çalışmanın veya yazarın uygulamayı yeniden yazmasını istemenin dışında)?

Hazır bir araç varsa, bunu bilmek isterim. (Sandboxie ve Altiris SVS'yi şanssız denedim).

Dışarıda hiçbir şey yoksa, bunu yapmama izin verecek bir araç / kesmek programlamak istiyorum. Nereden başlayacağınıza dair işaretler arıyorum - ne dahil olacak, hangi becerilere ihtiyaç olacak. C ve Java'da orta derecede programlama becerilerim var.

Bu yapılamazsa, lütfen nedenini açıklayın.

EDIT: Kötü bir fikir biliyorum ama yine de yapmam gerekiyor (çeşitli nedenlerle). Herhangi bir uygulama için çalışan ve hataları tanıtmak genel bir yol istiyorum.


3
Windows uygulamaları varsayılan olarak tekil değildir. Eğer öyleyse, birisinin onu tek birton yapmak için ekstra çaba sarf ettiği ve muhtemelen bunun için bir nedeni olduğu anlamına gelir.
Silico'da

1
Uygulamanın birden çok kopyayı nasıl denetlediğine bağlıdır. Çeşitli uygulamalar farklı şekillerde kontrol eder ve bazı uygulamalar birden fazla şekilde kontrol eder.
ho1

In Silico'nun dediği gibi, muhtemelen iyi bir fikir değil. Uygulama, istendiği zaman birden fazla kopyanız varsa verileri bozabilir, çökebilir veya başka sorunlara neden olabilir.
ho1

Bir işlemin yalnızca tek bir örneği çalıştırmayı zorlamanın birçok yolu vardır; Bunu önleyebilecek genel bir araç oluşturmanın mümkün olduğunu düşünmüyorum. Her bir uygulamayı ayrı ayrı incelemeniz ve özel olarak uyarlanmış bir şeyler yazmanız gerekir.

Bir çözüm buldun mu?
Tomas

Yanıtlar:


2

Birçok uygulama genel işlem listesini (EnumProcesses, OpenProcess, GetModuleBaseName ve benzeri işlevlerle) veya pencere listesini (EnumWindows, EnumChildWindows ile) denetler.

Bu uygulamadan bu belirli API işlev çağrılarını kancalamak ve uygulamayı kandırmak için istenen verileri değiştirmek üzere kanca ayarlamayı (SetWindowsHookEx, CallNextHookEx, vb. Örneklerine bakın) deneyebilirsiniz.


Tüm cevaplar için teşekkürler. Sanırım aracın dikkatli bir tasarıma ihtiyacı var. Öngörülen araç, pencerelerin tam bir kopyasını çalıştırmayı içermeyen, ancak tüm uygulamaları kandıracak kadar hafif bir sanal işletim sistemi ortamı gibi olmalıdır.
Jus12

4

Farklı uygulamalar farklı yöntemler kullandığından genel bir yol yoktur. Yöntemlerin çoğu, makine çapında (veya en azından kullanıcı çapında) bir kaynak (örneğin, adlandırılmış bir senkronizasyon nesnesi, iyi bilinen bir ad ve konuma sahip bir dosya veya bir kayıt defteri değeri) almaya çalışmayı içerir. Uygulama başarılı olursa, çalıştığı sürece bu kaynağı tutar. Başka bir örnek kaynağı zaten tuttuğu için başarısız olursa, orijinal örneği yanıt verebilmesi için sinyal vermeye çalışabilir.

16-bit Windows'ta, bir program başladığında işletim sistemi, HINSTANCE adlı benzersiz bir tanıtıcı kullandı. Ayrıca, şu anda çalışan bir işlemin aynı yürütülebilir dosyayı (varsa) kullanarak HINSTANCE geçmesi gerekir. O günlerde, bu muhtemelen programın bir kopyanın zaten çalışıp çalışmadığını bilmenin en yaygın yoluydu. Korumalı belleğe, işleme özgü adres alanlarına ve ortak çoklu görevin sonlanmasına sahip 32 bit Windows'da, HINSTANCE'lar artık aynı anlamı taşımaz.

Az sayıda uygulama bunu sadece "kullanılabilirlik" için yapar, ancak diğer pek çok kişi için tekilleri uygulamak için iyi bir neden olabilir. Bunu atlamak verilerin bozulmasına veya sadece çalışmamasına neden olabilir.


3

Uygulamayı farklı kullanıcı hesaplarında çalıştırabilirsiniz ve örnek denetimi artık çalışmaz.


2

Bu mümkün!

İşte aynı LAN sunucusuna bağlı 4 pencerede yarı ömür 1 4x çalıştıran bir resim, tek sorun denetleyicilerin her pencereye bağımsız olarak bağlı olmamasıdır.

https://web.archive.org/web/20150315150158if_/http://img29.imageshack.us/img29/5642/yc0y.jpg

Bunu yapmak için 'Process Explorer' - '\ BaseNamedObjects \ ValveHalfLifeLauncherMutex' alt işleminde 'Kapanmayı Kapat' olarak bilinen şeyi yapmanıza izin veren bir programa ihtiyacınız var. o kadar zor değil. ayrıntılı talimatlar için buraya gidin - http://am.half-lifecreations.com/forums/index.php?topic=479.0

Ama evet bu yarı ömür için ama Process Explorer olsun ve eminim u çok kez çalıştırmak istediğiniz programları almak için hangi kolu / süreci kapatmak gerekir gerekir bulmak mümkün olacak.

Pencerelerin neden zaten bir özellik olarak bölmeler / çıtçıtlarda birçok kez koşu oyunları uygulamadığını anlamıyorum! açıkça çünkü insanlar kadar çok PC satın almazlar ... Ayrıca SoftXSpand gerçekten harika göz atın, bağımsız kullanıcılar olarak pencerelerin birden fazla örneğini çalıştırmak için izin verir


Bir mutant sapı kapatmak benim için çalışıyor. Yarılanma ömrü değildir, ancak programcı tarafında bir muteks kullanmak oldukça yaygındır, bu nedenle bu çözüm bir tür jeneriktir.
AZ.

Bunun nedeni insanların daha fazla bilgisayar satın almamasıdır. Bunun nedeni geliştiricilerin yalnızca singleton örnekleri istemesi.
Wesley Long

1

Kilit dosyaları, adlandırılmış yöneltmeler ve senkronizasyon olayları, uygulamaların çalışan tek örnek olduklarını kontrol etmek için kullandıkları yaygın yöntemlerden bazılarıdır. Kilit dosyaları üzerinde çalışmak için, dosya sistemini sanallaştırmanız, sisteme bağlamanız veya dikkatlice zamanlanmış bir silme yapmanız gerekir (ve dosyayı da açık kilitlerse bu işe yaramayabilir). Adlandırılmış kanallar ve senkronizasyon olayları çok daha zor olacaktır, çünkü dosyalarla yaptığınız uygulamanın dışından aynı kontrole sahip değilsiniz.


0

Windows 8 ve daha yeni sürümlerde, Shift tuşunu basılı tutun ve görev çubuğundaki programların simgesini / düğmesini tıklayın. Bu, yürütülebilir dosyayı tekrar başlatacaktır. Uygulama klonları kendi kendine kontrol etmezse, yeni bir pencereniz olacaktır.

Bu, örneğin dahili bir sqlite dosyası açılırsa uygulamanın dahili dosyalarıyla potansiyel olarak çakışma yaratacaktır, bu yüzden gerçekten ne yaptığınızı bilmeniz veya bir şey kırılırsa umursamamanız gerekir.

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.