2009-05-17 10 views
9

मैं डेवलपर के रूप में काम कर रहा हूं, एक वीबी 6 ऐप का इलाज कर रहा हूं जिसे Vista के तहत कड़ी मेहनत करने की जरुरत है। हालांकि, इसे Vista स्टार्टर एडिशन के तहत ठीक काम करना चाहिए, क्योंकि यहां संस्करण नए कंप्यूटर (अर्जेंटीना) आते हैं।विस्टा स्टार्टर का पता लगाने तीन-खुली ऐप सीमा

अब तकनीकी सामग्री पर: मेरा ऐप छवियों (आकार बदलने, काले और सफेद विभाजन, रोटेशन इत्यादि) को संसाधित करने के लिए ImageMagick's convert का उपयोग करता है, इसलिए तीन-ऐप्स सीमा वास्तविक दर्द है ... ठीक है, कहीं। सबसे खराब: को चलाने में विफलता परिवर्तित नहीं है (वर्तमान में?) पता चला है, इसलिए जब ऐसा होता है तो प्रोग्राम लटकता है।

किसी को भी मुझे बता सकते हैं कैसे:

a_ खुला एप्लिकेशन की संख्या का पता लगाने, तो मैं थोड़ी देर बाद प्रयास कुछ बंद करने के लिए उपयोगकर्ता पूछ सकता हूँ? एक एपीआई कॉल, शायद? या

बी_ पता लगाएं कि (वर्तमान में "शैल" फ़ंक्शन के साथ चल रहा है) को ठीक से लॉन्च नहीं किया गया था?

कृपया, "आपको अपने ऐप को एक्स पर माइग्रेट करना चाहिए" जैसे टिप्पणियां मेरे बॉस (मुझे नहीं) को भेजी जानी चाहिए, आपका स्वागत नहीं है और मुझे आपकी जगह पर यात्रा करने और आपके पैर की अंगुली काटने के लिए तैयार किया जाएगा। वीज़ा प्राप्त करने में मुझे कुछ समय लगेगा, लेकिन मैं आपको आश्वासन देता हूं कि एक दिन एक अजनबी आपके दरवाजे पर दस्तक देगा, अपने स्टैक ओवरफ्लो उपयोगकर्ता नाम से पूछें और फिर वह आपके पैर की अंगुली काट देगा।

आपके विचार

+0

मैं एक अलग ओएस उपयोग करने का सुझाव लिए जा रहा था, लेकिन फिर मैंने पढ़ा अंगूठी काटने के बारे में हिस्सा ... :) – Zifre

+0

इसके अलावा, क्या आपने अपने ऐप के समान प्रक्रिया के अंदर चलाने के लिए ImageMagick को पैच करने की कोशिश करने के बारे में सोचा है? यह शायद आदर्श समाधान होगा। – Zifre

+0

शायद मुझे अपने पैर की अंगुली का बच्चा पसंद है? विनोदी _and_ दिलचस्प सवाल के लिए +1। – Kris

उत्तर

0

क्या आपने शैल फ़ंक्शन के वापसी मूल्य की जांच करने का प्रयास किया है? दस्तावेज़ीकरण का कहना है कि यदि खोल विफल हो जाती है तो उसे शून्य वापस करना चाहिए।


मार्टिन टिप्पणी में कहते हैं: मैं कोशिश की, लेकिन हर बार जब मैं वापसी मान की जाँच करें, शून्य से कुछ अजीब संख्या अधिक है।

मार्कजे फिर से: वापसी मान प्रक्रिया आईडी होना चाहिए। यह जांचने के लिए एक एपीआई कॉल करना संभव हो सकता है कि वे वैध प्रक्रिया आईडी हैं या नहीं।आप कुछ इस तरह की कोशिश कर सकते: यह हमेशा से पता चलता एक मेरे लिए MsgBox "सफल", क्योंकि मैं विस्टा स्टार्टर एडीशन की जरूरत नहीं है :)

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

आपकी टिप्पणी पढ़ने के बाद मैंने कोशिश की, लेकिन हर बार जब मैं वापसी मूल्य की जांच करता हूं, तो कुछ अजीब संख्या शून्य से अधिक होती है। व्यक्तिगत रूप से, मैं आईडीई को दोषी ठहराता हूं, यह देखने के लिए कि ओएस विकसित होने के दस साल बाद पूरी तरह से अप्रत्याशित तरीकों से बदल जाएगा। लेकिन यह सिर्फ मुझे है। – Martin

1

साई

उपेक्षा के लिए धन्यवाद, मैं भविष्य में विषय पंक्ति से बाहर पढ़ने की जरूरत है!

कॉल GetSystemMetrics() को SM_STARTER (एक कॉन्स्ट = 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 

यह XP के लिए परिभाषित किया गया है, और Vista के लिए समान होना चाहिए। कोशिश करने के लिए काफी आसान है, है ना?

0

जो आप सुनना नहीं चाहते थे, लेकिन मैं शर्त लगाऊंगा कि "स्टार्टर" तोड़ने के लिए पर्याप्त आसान है।

मैं इस काम की तरह कुछ शर्त लगाऊंगा: लोड सिस्टम सेवा, SE_DEBUG लें, सभी प्रक्रियाओं को चलाएं, रैम में 0 वापस करने के लिए GetSystemMetrics (0x88) को पैच करें।

4

आप ImageMagickObject COM + इंटरफ़ेस का उपयोग क्यों नहीं कर रहे हैं? मैंने इसका कभी भी उपयोग नहीं किया है, लेकिन प्रलेखन का दावा है कि यह एक अतिरिक्त ऐप चलाने के बिना, कमांड लाइन उपयोगिता सबकुछ कर सकता है।

+0

ईमानदारी से, मैं इसका उपयोग नहीं कर रहा हूं क्योंकि यह मुझे डराता है (COM + इंटरफेस मुझे दुःस्वप्न देते हैं), लेकिन चूंकि मैं बेहतर समाधान के बारे में नहीं सोच सकता, इसलिए मैं इसे आज़मा दूंगा। – Martin

0

खोल के बजाए createprocess के साथ शुरू करने का प्रयास करें? या एक सेवा है, जबकि ऐप सेवा के साथ संवाद करता है।

संबंधित मुद्दे