.NET प्रक्रिया। डिफ़ॉल्ट डिफॉल्ट निर्देशिका?


114

मैं C # .NET कंसोल एप्लिकेशन के अंदर से जावा एप्लिकेशन को बंद कर रहा हूं । यह उस स्थिति के लिए ठीक काम करता है जहां जावा एप्लिकेशन को परवाह नहीं है कि "डिफ़ॉल्ट" निर्देशिका क्या है, लेकिन एक जावा एप्लिकेशन के लिए विफल रहता है जो केवल समर्थन फ़ाइलों के लिए वर्तमान निर्देशिका खोजता है।

क्या एक प्रक्रिया पैरामीटर है जिसे डिफ़ॉल्ट निर्देशिका को निर्दिष्ट करने के लिए सेट किया जा सकता है कि एक प्रक्रिया शुरू की जाती है?

जवाबों:


183

हाँ! ProcessStartInfo एक संपत्ति का आह्वान किया है WorkingDirectory , बस का उपयोग करें:

...
using System.Diagnostics;
...

var startInfo = new ProcessStartInfo();

  startInfo.WorkingDirectory = // working directory
  // set additional properties 

Process proc = Process.Start(startInfo);

क्या WorkingDirectoryएक सापेक्ष पथ हो सकता है, और यदि हां, तो यह किसके सापेक्ष है, वर्तमान फ़ाइल या वर्तमान निष्पादन योग्य की निर्देशिका? मुझे मेरे प्रोग्राम को क्रियान्वित करने में दिक्कत हो रही है जिसे मैं शुरू करने की कोशिश कर रहा हूं। मैंने कार्यकारी निर्देशिका को exe (वर्तमान फ़ाइल के सापेक्ष और वर्तमान exe) की निर्देशिका में सेट कर दिया है, लेकिन यह नहीं मिल सकता है।
पुश्किन 21

56

प्रक्रिया शुरू करने से पहले इसे सेट करने के लिए ProcessStartInfo.WorkingDirectory संपत्ति का उपयोग करें । यदि संपत्ति सेट नहीं है, तो डिफ़ॉल्ट कार्यशील निर्देशिका% SYSTEMROOT% \ system32 है।

आप का उपयोग करके% SYSTEMROOT% का मान निर्धारित कर सकते हैं:

string _systemRoot = Environment.GetEnvironmentVariable("SYSTEMROOT");  

यहाँ कुछ नमूना कोड है जो Notepad.exe को% ProgramFiles% की कार्यशील निर्देशिका के साथ खोलता है:

...
using System.Diagnostics;
...

ProcessStartInfo _processStartInfo = new ProcessStartInfo();
  _processStartInfo.WorkingDirectory = @"%ProgramFiles%";
  _processStartInfo.FileName         = @"Notepad.exe";
  _processStartInfo.Arguments        = "test.txt";
  _processStartInfo.CreateNoWindow   = true;
Process myProcess = Process.Start(_processStartInfo);

एक पर्यावरण चर भी है जो आपकी प्रक्रिया के लिए वर्तमान कार्यशील निर्देशिका को नियंत्रित करता है जिसे आप सीधे Network.CurrentDirectory संपत्ति के माध्यम से एक्सेस कर सकते हैं।


अच्छा, मुझे नहीं पता था कि आप पर्यावरण चर का उपयोग कर सकते हैं।
ब्रेन २२

1
बिंगो, इसका उत्तर है - डिफ़ॉल्ट निर्देशिका SYSTEMROOT है। +1
ashes999

17

इसे लागू करने की कोशिश कर रहे मेरे सिर पर मारने के बाद बस एक नोट। यदि आपके पास "UseShellExecute" सेट है, तो वर्किंगडायरेक्टरी मान सेट करना गलत है।


1
यह प्रश्न का उत्तर प्रदान नहीं करता है। किसी लेखक से स्पष्टीकरण मांगने या उसका अनुरोध करने के लिए, उनकी पोस्ट के नीचे एक टिप्पणी छोड़ दें - आप हमेशा अपने स्वयं के पोस्ट पर टिप्पणी कर सकते हैं, और एक बार आपके पास पर्याप्त प्रतिष्ठा होने पर आप किसी भी पोस्ट पर टिप्पणी कर पाएंगे ।
साइक्लोनोस्कोप

1
6 साल बाद भी, UseShellExecute के बारे में यह टिप्पणी सहायक थी। मुद्दा तय किया।
एलनक


6

Process.Start पद्धति में एक अधिभार है जो ProcessStartInfo का एक उदाहरण लेता है। इस वर्ग के पास "वर्किंगडायरेक्टरी" नामक एक संपत्ति है।

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


4

ProcessStartInfoवर्ग का उपयोग करें और WorkingDirectoryसंपत्ति के लिए एक मूल्य निर्दिष्ट करें ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.