2010-07-08 16 views
11

के रूप में चलाया जाता है मेरे पास एक डेल्फी 2010 एक्सई है जो एक दूसरा एक्सई लॉन्च करता है। दूसरे exe में, एक संवाद है जो openDialog.execute को कॉल करता है। जब यह रिमोट डेस्कटॉप के तहत विंडोज 2008 एंटरप्राइज़ आर 2 के तहत चलता है, तो यह के रूप में चलता है, लेकिन जब रिमोट एप्लिकेशन के रूप में चलाया जाता है, जैसे ही फ़ाइल संवाद पॉप हो जाता है, एप्लिकेशन लटकता है, सभी एप्लिकेशन विंडो को सफेद करता है। इससे बाहर निकलने का एकमात्र तरीका एप्लिकेशन को समाप्त करना है। मैंने TFileOpenDialog के साथ TOpenDialog को बदलने की कोशिश की, परिणाम समान हैं। मैंने आरडीपी फ़ाइल को संशोधित करने में देखा है जो मुख्य एप्लिकेशन लॉन्च करता है, लेकिन वहां कोई पैरामीटर नहीं देख सकता जो इससे फर्क पड़ेगा। क्या किसी ने कभी इस तरह के व्यवहार को देखा है?डेल्फी टोपेनडियलॉग विंडोज 2008 में लटकता है जब दूरस्थ डेस्कटॉप एप्लिकेशन


2010.07.13

यह एक सरल उदाहरण का उपयोग reproducable है अपडेट किया गया। उदाहरण में दो निष्पादन योग्य फाइलें हैं। पहला फ़ाइल लॉन्चर है, जिसे m_module.exe कहा जाता है, जिसमें एक संपादन, एक बटन और नीचे दिया गया कोड होता है।

procedure TForm1.Button1Click(Sender: TObject); 
begin 
    OpenDialog1.execute; 
end; 

पहले:

procedure TForm1.Button1Click(Sender: TObject); 
begin 
    ShellExecute(Handle, 'open', stringToOLEstr(edit1.text) , nil, nil, SW_SHOWNORMAL) ; 
end; 

procedure TForm1.FormShow(Sender: TObject); 
begin 
    edit1.text:=application.exename; 
end; 

दूसरा निष्पादन एक बटन और नीचे दिए गए कोड में शामिल हैं: मैं दूसरे निष्पादन मिलान करने के लिए इससे पहले कि मैं लांच बटन पर क्लिक करें संपादित में निष्पादन योग्य फ़ाइल का नाम बदलने के मॉड्यूल आरडीपी फ़ाइल से लॉन्च किया गया है। आवेदन फ़ोल्डर में \ Windows \ System32 फ़ोल्डर से

thumbcache.dll 
dtsh.dll 
wkscli.dll 

, समस्या को समाप्त किया जाता है:

2010.07.14

मैं ने पाया है कि अगर मैं निम्नलिखित DLLs कॉपी अपडेट किया गया।

मुझे और पता चला है कि ट्रस्टेड इंस्टालर से \ Windows \ System32 फ़ोल्डर में इन डीएल के स्वामित्व और अनुमति स्तर को प्रशासक के समूह में बदलना एक ही परिणाम है (उन्हें एप्लिकेशन निर्देशिका में कॉपी करना स्वामित्व और अनुमति मुझे बदल रहा है)

इस बात की पुष्टि करने के लिए, मैं सत्यापित है कि त्रुटियों अगर मैं स्वामित्व और अनुमति स्तर वापस TrustedInstaller के लिए प्रशासक समूह से दूर बदल दोबारा प्रकट हुई।

तो ऐसा लगता है कि यह किसी प्रकार का एक एक्सेस मुद्दा है। शायद यह इस मुद्दे के कारण की खोज में मदद करेगा।

GetWindowsDirectory http://msdn.microsoft.com/en-us/library/ms724454%28VS.85%29.aspx के लिए इस MSDN लेख टर्मिनल सर्विसेज के तहत चल आवेदनों में से कुछ दिलचस्प व्यवहार दस्तावेजों:

2010.07.18

(Embarcadero द्वारा प्रदान की) कुछ अतिरिक्त जानकारी के लिए उपयुक्त हो सकती अपडेट किया गया। GetWindowsDirectory सीधे प्रति उपयोगकर्ता Windows सिस्टम निर्देशिका के सैंडबॉक्सिंग नामक नहीं किया जा रहा है, वहीं समस्या किसी प्रकार का कारण हो सकता है। शायद GetOpenFileNameA को बुला श्रृंखला में DLLs में से एक के बजाय sandboxed एक इस तरह एक अधिकारों के उल्लंघन के कारण की वास्तविक सिस्टम निर्देशिका में वास्तविक DLL संदर्भित कर रहा है। यह सिर्फ अटकलें हैं, लेकिन यह जांच कर रही लायक है।यदि आप सर्वर पर काम कर रहे SysInternals Process Monitor या Process Explorer को प्राप्त करने में सक्षम थे, तो आपको स्टैक ट्रेस लोड होने पर commdlg32 और अन्य DLLs देखने में सक्षम होना चाहिए।

सभी विरासत अनुप्रयोग (यानी टर्मिनल सेवा या रिमोट डेस्कटॉप सेवाओं के लिए बनाए गए सभी एप्लिकेशन) अनुप्रयोग संगतता परत के अंतर्गत चलते हैं। यह एमएसडीएन आलेख http://msdn.microsoft.com/en-us/library/cc834995%28VS.85%29.aspx देखें। IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE ध्वज Windows.PAS में परिभाषित किया गया है। परीक्षण प्रयोजनों के लिए आप अपने आवेदन के लिए Windows जोड़कर अपने आवेदन के पीई हैडर में जोड़ सकते हैं अनुभाग उपयोग करता है और अधिकार के तहत उपयोग करता है अनुभाग डाल:

{$ SetPEOptFlags IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE}

इस अनुकूलता बायपास करने के लिए अपने आवेदन का कारण होगा परत। मैं वर्तमान में जांच कर रहा हूं कि क्या उत्पन्न प्रक्रियाएं (जैसे आपका दूसरा एक्सई) आरडीएस के तहत परिभाषित आवेदन के सभी अधिकारों और सेटिंग्स को बरकरार रखती है।

+0

के बीच स्विच करते समय ऑर्डर सही हो जाएगा यदि आप दूसरा एप्लिकेशन सीधे शुरू करते हैं तो यह काम करता है? –

+0

प्रश्न में मशीन पर एकाधिक मॉनीटर? मुझे संदेह है कि ओपन डायलॉग दूसरे मॉनीटर एरिया में खुल रहा है, न कि रिमोट डेस्कटॉप विंडो में। संवाद-एल्ट-स्पेस-एम- दबाएं और फिर संवाद को वापस देखने के लिए तीर कुंजियों का उपयोग करें। –

+0

madExcept रिपोर्ट EAccessViolation। क्या आप टिप्पणी कर सकते हैं कि यह कैसे लटकने से संबंधित है? – Alex

उत्तर

2

विंडोज thumbcache.dll मॉड्यूल में AV (c0000005) की रिपोर्ट करता है।

मुझे लगता है कि thumbcache.dll फ़ाइलों के लिए थंबनेल बनाने/कैशिंग के साथ कुछ करने के लिए है। बिल्डिंग थंबनेल का मतलब एक्सप्लोरर को तृतीय पक्ष एक्सटेंशन का उपयोग करना हो सकता है, जो आरडीपी के साथ अच्छी तरह से व्यवहार नहीं कर सकता है।

स्वच्छ प्रणाली पर आज़माएं। परीक्षण कॉन्फ़िगरेशन सेट अप करने के लिए VMWare या समान वर्चुअल मशीन का उपयोग करें।

पीएस यह आलेख भी देखें: How to debug application’s hang? लेकिन मुझे लगता है कि लटका आपके मामले में एक और समस्या का परिणाम है।

+0

अपने सभी अपडेट के साथ, पूरी तस्वीर स्पष्ट दिखती है ना? मुझे लगता है कि आपको विंडोज टर्मिनल सर्वर एप्लिकेशन संगतता परत और उसके 'एक्सप्लोरर.एक्सईई' के साथ मानक TFileOpen संवाद पर इसके प्रभावों को 'thumbcache.dll'' सहित कुछ संदर्भ शामिल करने के लिए इस उत्तर को संपादित करना चाहिए, जो स्वयं बिल द्वारा लोड नहीं किया गया था, लेकिन मानक विंडोज फ़ाइल संवाद द्वारा लोड किया गया था। –

0

मैं आपको अपनी प्रक्रिया के गुण देखने के लिए Process Explorer उपकरण का उपयोग करने की सलाह देता हूं। जांचें, जो कि दोनों मामलों में वास्तव में डीएलएल लोड होते हैं (आप इसे अपनी प्रक्रिया चुनकर और मॉड्यूल दृश्य में निचले फलक खोलकर कर सकते हैं)।

आप प्रक्रिया स्टार्टअप (फिर से: दोनों मामलों में) की निगरानी के लिए Process Monitor टूल का भी उपयोग कर सकते हैं और प्रश्न में डीएलएल के किसी भी संदर्भ को देख सकते हैं।

2

एफडब्ल्यूआईडब्ल्यू, हमारे पास एक समान स्थिति है, लेकिन यह एक सुरक्षा आवश्यकता से प्रेरित है, न कि क्रैश। जब हमारा ऐप साइट्रिक्स के माध्यम से चलता है, तो हमें हमेशा नियमित विंडो "ओपन" या "सेव करें" संवाद दिखाने के लिए मना किया जाता है। तो हमने अपना खुद का लुढ़काया। इसे ड्राइव अक्षरों का एक कॉम्बो (केवल स्थानीय ड्राइव), फ़ोल्डर चयनकर्ता (अनुमोदित ड्राइव तक सीमित), फ़ाइल नाम चयनकर्ता, और फ़ाइल नाम संपादन बॉक्स मिला है।

हमारे लिए, यह किसी भी सक्रिय निर्देशिका के मुद्दों के आसपास आता है, और सुरक्षा को खुश रखता है। और यह उपयोगकर्ताओं को फ़ाइलों को हमारे फाइल सिस्टम में ड्रॉप करने की कोशिश करने से रोकता है या उन चीजों को देखता है जिन्हें उन्हें नहीं करना चाहिए।

यदि वे सैंडबॉक्स में नहीं चल रहे हैं, तो हम नियमित विंडोज फ़ाइल संवाद दिखाते हैं। एक रैपर फ़ंक्शन हमें इसे कहीं से भी कॉल करने की अनुमति देता है और एक स्थान पर "सैंडबॉक्स बनाम विंडोज़" निर्णय छोड़ देता है।

0

ऐसा लगता है कि आपने अपनी समस्या को किसी प्रकार की पहुंच समस्या तक सीमित कर दिया है, इसलिए निम्नलिखित स्पष्टीकरण आपकी मदद नहीं कर सकता है। http://social.technet.microsoft.com/Forums/en-US/winserverTS/thread/0a88919f-2d72-4340-abd7-fbe0e9545f25/

जाहिर जेड आदेश: लेकिन वहाँ RemoteApp पर पॉपअप विंडोज़ के साथ एक समस्या मौजूद रही दिखती है और मैं कल्पना कर सकता है कि यह (कम से कम सैद्धांतिक रूप से) एक ऐसी ही समस्या का कारण बन सकता, यही कारण है कि मैं यह उल्लेख करना चाहते हैं है RemoteApp का उपयोग करते समय खिड़कियों का हमेशा सही नहीं होता है। आपके मामले में TOpenDialog एक मोडल पॉपअप विंडो होना चाहिए। बग के कारण, मैं कल्पना कर सकता था कि पृष्ठभूमि में TOpenDialog दिखाई दे सकता है। आपकी मुख्य विंडो अग्रभूमि में रहेगी लेकिन इसे अक्षम कर दिया जाएगा क्योंकि TOpenDialog मोडल है। तब विंडोज़ को यह नहीं पता कि एक अक्षम विंडो को कैसे निकालना है और बस एक सफेद बॉक्स खींचें।

0

हम लेकिन OpenDialog.Execute पर समस्याओं केवल एक कंप्यूटर कर रहे थे - और यह यादृच्छिक मैंने पाया कि exe जोड़ने विंडोज डीईपी समस्या समाधान हो सकता है हम इसे बदलने के बाद से किसी भी मुद्दे नहीं किया है लग रहा था

यहाँ खिड़कियों डीईपी सेटिंग्स http://www.itechtalk.com/thread3591.html

इस

बदलने के तरीके पर लिंक एक समाधान है - किसी को भी जानता है कि कैसे डीईपी खुश रखने के लिए नीचे दिए गए

0

यह जेड आदेश एक टिप्पणी जोड़ने के लिए कृपया गलत है (जिसे मैं अक्सर सिट्रिक्स में देखता हूं, बिना उचित फिक्स किए) आप अभी भी ctrl-f4 या alt-f4 के साथ फ़ॉर्म को बंद करने में सक्षम होंगे। इसके अलावा आवेदन "जवाब नहीं दे रहा" होगा। कभी-कभी ऑर्डर

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