2009-05-17 9 views
9

Ben curently umutsuzca Vista altında sorunsuz çalışması için gereken VB6 app mantaining, bir geliştirici olarak çalışıyorum. Ancak, Vista Starter Edition altında gayet iyi çalışmalı, çünkü buradaki (Arjantin) yeni bilgisayarların sürümü geliyor.Tespit Vista Starter üç açık-app sınır

Şimdi, teknik konu üzerine: uygulamanız görüntüleri (yeniden boyutlandırma, siyah ve beyaz segmentasyon, döndürme, vb.) Işlemek için ImageMagick's convert kullanıyor, bu nedenle üç uygulama limiti, ... iyi, bir yerlerde gerçek bir acıdır. En kötüsü: dönüşümündeki başarısızlık (şu anda?) Algılamıyor, bu durumda program askıda kalıyor.

herkes nasıl bana söyleyebilir:

a_ açık uygulamaların sayısını Algılama, bu yüzden yeniden denemeden önce bir şey kapatmak için kullanıcı sorabilirim? Bir API çağrısı, belki? veya (şu anda "Kabuk" işleviyle çalışıyor) dönüştürmenin bu doğru şekilde başlatılmamış olduğunu algıla?

Lütfen

, "Eğer x uygulamanızı göç gerektiği" gibi yorumlar (ben değil), hoş değil ve bana yere seyahat ve ayak parmağını ısırmaya yapacak patronuma gönderilmelidir. Yine de, vize almak için biraz zaman alacaktır, ama sizi temin ederim ki bir gün bir yabancı kapınızı çalacak, StackOverflow kullanıcı adınızı soracaktır ve sonra parmağınızı ısırmayacaktır. İlginize

+0

Farklı bir işletim sistemi kullanmayı önerecektim ama sonra ayak parmağınızı ısırmak hakkında ... :) – Zifre

+0

Ayrıca, uygulamanızla aynı işlem içinde çalışmak için ImageMagick'i yamalamaya çalışmayı düşündünüz mü? Bu muhtemelen ideal bir çözüm olurdu. – Zifre

+0

Belki de ayak parmağım ısırıldı mı? Humourous _and_ enteresan soru için +1. – Kris

cevap

0

Shell işlevinin dönüş değerini kontrol etmeyi denediniz mi? Belge, kabuk başarısız olursa sıfıra dönmesi gerektiğini söylüyor. Denedim, ama dönüş değerini kontrol her zaman, sıfırdan bazı garip sayı büyüktür:


Martin yorumların diyor.

MarkJ tekrar: Dönüş değerlerinin işlem kimlikleri olması bekleniyor. Geçerli işlem kimlikleri olup olmadığını kontrol etmek için bir API çağrısı yapmak mümkün olabilir.Böyle bir şey deneyebilirsiniz: Bu her zaman benim için bir "başarılı" MsgBox gösterir, çünkü ben Vista Starter Edition yok :)

Private Declare Function OpenProcess Lib "kernel32" (_ 
    ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, _ 
    ByVal dwProcessId As Long) As Long 
Private Declare Function CloseHandle Lib "kernel32" (_ 
    ByVal hObject As Long) As Long 

Sub StartProcess() 
    Dim ProcessId& 
    Dim hProcess& 
    Const PROCESS_QUERY_INFORMATION = &H400& 

    ProcessId = Shell("notepad.exe", vbNormalFocus) 
    hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, False, ProcessId) 
    If hProcess = 0& Then 
    MsgBox "Failed" 
    Else 
    MsgBox "Succeeded" 
    CloseHandle hProcess 
    End If 

End Sub 
+0

Yorumunuzu okuduktan sonra denedim, ancak dönüş değerini her kontrol ettiğimde, sıfırdan büyük bir tuhaf sayı var. Şahsen, OE'yi geliştirdikten on yıl sonra öngörmediği için IDE'yi suçluyorum. tamamen beklenmedik şekillerde değişecektir. Ama bu sadece benim. – Martin

1

Kederlen

Disregard için

sayesinde gelecekte konu satırına ötesine okumak gerekiyor!

Çağrı GetSystemMetrics() geçen SM_STARTER (a Sabit = 88).

Option Explicit 

Private Const SM_STARTER = 88& 

Private Declare Function GetSystemMetrics Lib "user32" (_ 
    ByVal nIndex As Long) As Long 

Private Sub Form_Load() 
    MsgBox CStr(GetSystemMetrics(SM_STARTER)) 'Zero (0) means False. 
End Sub 

Bu, XP için tanımlanmış ve Vista için aynı olması gerekir. Denemesi kolay, değil mi?

0

değil duymak istiyordum ama "marş" kırmak için yeterince kolay olduğunu bahse girerim neyi.

Bu gibi bir şeye bahse girerim: sistem hizmetini yükle, SE_DEBUG'ı al, tüm işlemleri yürü, GetSystemMetrics'i (0x88) 0'a RAM'de döndür.

4

Neden ImageMagickObject COM + arabirimini kullanmıyorsunuz? Bunu hiç kullanmadım, ancak belgeler ek bir uygulama çalıştırmadan komut satırı yardımcı programlarının yapabileceği her şeyi yapabileceğini iddia ediyor.

+0

Dürüst olmak gerekirse, beni korkutmadığı için kullanmıyorum (COM + arayüzleri bana kabuslar veriyor), ama daha iyi bir çözüm düşünemediğimden, bunu denemeliyim. – Martin

0

CreateProcess ile yerine kabuk aracılığıyla başlamayı deneyin? Uygulama, hizmetle iletişim kurarken bir servisi de yönetin.