2011-08-22 15 views
5

जब मैं Process.Start("echo", "%cd%") करने का प्रयास करता हूं तो यह System.ComponentModel.Win32Exception: The system cannot find the file specified उठाता है। जब मैं इसे मैन्युअल रूप से cmd में करता हूं तो यह बस ऐसा ही काम करता है। मुझे कभी पता नहीं था कि एक अंतर है ...प्रक्रिया। स्टार्ट ("इको", "% सीडी%") W32Exception फ़ाइल नहीं मिली

साथ ही, जब मैं एक फाइल के File.Exists(logfile.txt) (डब्ल्यू/ओ पथ) करता हूं जो निश्चित रूप से वहां होना चाहिए, तो यह झूठा हो जाता है। यह echo उपरोक्त कारण है: डीबगिंग ...

यह त्रुटि मेरी विकास मशीन पर नहीं होती है, केवल उसी पर जहां मैं परीक्षण कर रहा हूं।

पथ चर सामान्य दिखता है। दोनों WinXP हैं। दोनों चल रहे हैं .NET 3.5

+0

आप पथ के बिना फ़ाइल तक क्यों पहुंच रहे हैं? बीटीडब्ल्यू आप 'पर्यावरण। कंटेंट डायरेक्टरी' – Yahia

उत्तर

9

जहाँ तक Process.Start("cmd.exe", "/c echo %CD%")

प्रयास करें गूंज के रूप में एक निष्पादन लेकिन एक कमांड के अंदर नहीं है।

+2

/सी कमांड द्वारा वर्तमान कार्यशील निर्देशिका प्राप्त कर सकते हैं: निर्दिष्ट कमांड और रिटर्न निष्पादित करता है। उन लोगों के लिए जो सोचते हैं कि उसने क्या किया। – Codezilla

1

ऐसा इसलिए है क्योंकि echo एक कंसोल कमांड है, एप्लिकेशन नहीं - यह किसी निष्पादन योग्य फ़ाइल में नहीं है।

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

2

यदि आप cmd पर अपने आवेदन की कार्य निर्देशिका को पास करना चाहते हैं तो आप System.Environment.CurrentDirectory का उपयोग कर सकते हैं। AFAIK% सीडी% cmd के लिए आंतरिक है, यही कारण है कि प्रक्रिया। स्टार्ट इसे विस्तारित नहीं करेगा। सामान्य पर्यावरण चर के लिए आप Environment.ExpandEnvironmentVariables का उपयोग कर सकते हैं।