मेरे पास निम्न छोटा सी # अनुप्रयोग है जो "jconsole.exe" लॉन्च करने का प्रयास करता है, जो मेरी मशीन पर C: \ Programs \ jdk16 \ bin में स्थित है।प्रक्रिया। स्टार्ट() और पाथ पर्यावरण परिवर्तनीय
using System;
using System.Diagnostics;
namespace dnet {
public class dnet {
static void Main(string[] args) {
try {
Process.Start("jconsole.exe");
Console.WriteLine("Success!");
} catch (Exception e) {
Console.WriteLine("{0} Exception caught.", e);
}
}
}
}
मेरी पथ वातावरण चर
c:\windows;c:\windows\sytem32;c:\programs\jdk16\bin
पर सेट है यह पूरी तरह काम करता है। हालांकि, पथ वातावरण चर (ध्यान दें के बीच दो बैकस्लैश "c:" और "कार्यक्रमों")
c:\windows;c:\windows\sytem32;c:\\programs\jdk16\bin
पर सेट है, यह एक Win32 अपवाद के साथ विफल रहता है।
System.ComponentModel.Win32Exception (0x80004005): The system cannot find the file specified
at System.Diagnostics.Process.StartWithShellExecuteEx(ProcessStartInfo startInfo)
at System.Diagnostics.Process.Start(ProcessStartInfo startInfo)
at dnet.dnet.Main(String[] args)
दिलचस्प है, एक ही कमांड प्रॉम्प्ट जहाँ मैं नेट कार्यक्रम चलाने के लिए और अपवाद मिल में, मैं बस "jconsole.exe" लिख सकते हैं और कार्यक्रम शुरू कर देंगे। विंडोज़ को पैथ में डबल बैकस्लैश के साथ एक्जिक्यूटिव खोजने में कोई परेशानी नहीं है, लेकिन Process.Start() करता है।
पीएटीएच में अतिरिक्त बैकस्लैश समस्या क्यों पैदा कर रहा है, और मैं समस्या के आसपास कैसे हो सकता हूं? मुझे नहीं पता कि मैं जिस निष्पादन योग्य को कॉल करना चाहता हूं वह रनटाइम पर स्थित होगा, इसलिए मैं पैथ चर पर भरोसा करता हूं।
वहाँ एक EXE शुरू करने के लिए दो तरीके हैं, तो आप दोनों तरीकों का परीक्षण कर रहे हैं। आपका ऐप ShellExecuteEx() का उपयोग करता है, कमांड लाइन दुभाषिया CreateProcess() का उपयोग करता है। आप ProcessStartInfo.UseShellExecute प्रॉपर्टी के साथ खेल सकते हैं। इस बारे में चिंता करने में कोई बात नहीं है कि वे पैथ पर्यावरण परिवर्तक को अलग-अलग कैसे समझते हैं, आप जानते हैं कि समस्या को कैसे ठीक किया जाए। –