2009-06-13 20 views
9

मैं एक अलग उपयोगकर्ता के रूप में एक प्रक्रिया चलाने की कोशिश कर रहा हूं जिसमें Vista और उनके यूएसी सक्षम 2 अलग-अलग कंप्यूटरों में प्रशासक विशेषाधिकार है लेकिन उनमें से एक में मुझे Win32Exception मिलता है जो कहता है "निर्देशिका नाम अमान्य है "Win32Exception: निर्देशिका नाम अमान्य है

क्या कोई मुझे बता सकता है कि मेरे कोड में क्या गलत है?

var myFile = "D:\\SomeFolder\\MyExecutable.exe"; 
var workingFolder = "D:\\SomeFolder"; 
var pInfo = new System.Diagnostics.ProcessStartInfo(); 
pInfo.FileName = myFile; 
pInfo.WorkingDirectory = workingFolder; 
pInfo.Arguments = myArgs; 
pInfo.LoadUserProfile = true; 
pInfo.UseShellExecute = false; 
pInfo.UserName = {UserAccount}; 
pInfo.Password = {SecureStringPassword}; 
pInfo.Domain = "."; 

System.Diagnostics.Process.Start(pInfo); 

अद्यतन

अनुप्रयोग है कि इसके बाद के संस्करण कोड निष्पादित requireAdministrator निष्पादन स्तर है। मैं भी "Path.GetDirectoryName (myFile)" और "नया System.IO.FileInfo (myFile) .DirectoryName" के लिए काम कर फ़ोल्डर सेट

+0

त्रुटि में कोड की किस पंक्ति में होती है? क्या यह तब होता है जब आप FileInfo ऑब्जेक्ट बनाते हैं या जब आप प्रक्रिया शुरू करते हैं? –

+0

@divo System.Diagnostics.Process.Start (pInfo) – mrtaikandi

+0

आप प्रक्रिया मॉनिटर (Sysinternals से) का उपयोग यह निर्धारित करने के लिए कर सकते हैं कि अंतर्निहित Win32 फ़ाइल/फ़ोल्डर ऑपरेशन विफल हो रहा है। – Richard

उत्तर

2

ऐसा इसलिए है क्योंकि फ़ाइल की पथ लंबाई 255 वर्णों से अधिक है।

+1

धन्यवाद, यह मेरे लिए भी काम करता है, मेरे पास मेरा पूरा पथ और फ़ाइल नाम फ़ाइल नाम विशेषता में सेट किया गया था, इसके बजाय, 'पथ निर्देशिका' संपत्ति के तहत अपना रास्ता रखें, फ़ाइल नाम के लिए फ़ाइल नाम संपत्ति छोड़ दें। – Dal

3

निर्देशिका है लॉग ऑन उपयोगकर्ता के मैप किया घर फ़ोल्डर या उसके नीचे? इस ज्ञान से आधार लेख मदद कर सकता है:

"The directory name is invalid" error message when you start Cmd.exe or Notepad.exe by using the Run as feature in Windows

अद्यतन: कृपया ध्यान दें कि स्थानीय प्रशासक समूह के सदस्य होने के नाते और होने प्रशासनिक विशेषाधिकार Vista पर ही नहीं हैं।

मुझे लगता है कि जब आप अपना सी # एप्लिकेशन व्यवस्थापक के रूप में चलाते हैं तो सब कुछ ठीक काम करता है। निष्पादन योग्य राइट-क्लिक करें, फिर व्यवस्थापक के रूप में चलाएं, या एक उन्नत कमांड प्रॉम्प्ट से एप्लिकेशन प्रारंभ करें (दबाकर 0 पाने के लिए सबसे तेज़ तरीका प्रारंभ करें, Ctrl+Shift+Return के बाद 'cmd' दर्ज करें)।

या, वैकल्पिक रूप से, उस प्रक्रिया को चलाने वाले खाते के लिए यूएसी अक्षम करें।

+0

निर्देशिका गैर-सिस्टम ड्राइव में एक सामान्य निर्देशिका है जिसमें व्यवस्थापकों के समूह के लिए पूर्ण नियंत्रण अनुमति है। – mrtaikandi

+0

दूसरी प्रक्रिया चलाने वाले एप्लिकेशन के लिए प्रशासक निष्पादन स्तर की आवश्यकता होती है। इसके लिए यह प्रशासक के रूप में चलाएगा। – mrtaikandi

+0

बहुत बढ़िया ... उस जानकारी को साझा करने के लिए बहुत बहुत धन्यवाद – JeeZ

3

pInfo.WorkingDirectory = Path.GetDirectoryName(myFile); 

FileInfo फाइल सिस्टम के लिए किसी पहुंच बनाता है साथ

pInfo.WorkingDirectory = New System.IO.FileInfo(myFile).DirectoryName; 

को बदलने के लिए प्रयास करें, और मैं केवल व्यवस्थापक उपयोगकर्ता उस डायरेक्ट्री तक पहुंच गया है ग्रहण करेंगे। यदि यह आपकी समस्या का समाधान नहीं करता है, कम से कम यह आपके कोड को थोड़ा तेज़ कर देगा ...

+0

समस्या का समाधान नहीं करता है। मैंने एक स्थिर पता भी निर्दिष्ट किया है। – mrtaikandi

2

यह फ़ोल्डर नाम में स्थान के कारण है। एक बार जब मैंने अंतरिक्ष हटा दिया तो मैंने इस समस्या को दबाते समय फ़ाइल को काम करना शुरू कर दिया।

2

मेरे पास एक समान अनुभव था और यह हमारे विकास पर्यावरण के साथ एक मुद्दा साबित हुआ। हम सबस्ट कमांड का उपयोग कर वर्चुअल ड्राइव पर हमारी सोर्स कोड निर्देशिका को मैप करते हैं। तो फ़ाइल नाम और WorkingDirectory गुण सेट करने के लिए किया जा रहा था "डब्ल्यू: \ somefolder \ FileName.exe"

जब मैं अपने वास्तविक डिस्क (C :) के माध्यम से फ़ाइलों तक पहुँचने की हार्ड-कोडेड फ़ाइल का नाम & WorkingDirectory, मैं प्राप्त करना बंद कर दिया "अवैध निर्देशिका" अपवाद।

10

आपको ProcessStartInfo` की WorkingDirectory संपत्ति निर्दिष्ट करने की आवश्यकता है।Win32Exception error code 267 "The directory name is invalid" से:

मैं वर्तमान में "स्वचालित रन एज़" टूल पर काम कर रहा हूं। इसका लक्ष्य प्रशासकों की सहायता करने में सहायता करता है, जो मुझे पसंद करते हैं, उपयोगकर्ताओं को को प्रशासक के रूप में एक या दो प्रोग्राम निष्पादित करने का साधन देना है और के बिना ऐसा करना चाहते हैं जो व्यवस्थापक के पासवर्ड को आत्मसमर्पण कर रहा है।

तो, मैं Vista पर विकासशील रहा हूँ और मैं सिर्फ ProcessStartInfo और प्रक्रिया का उपयोग कर अवधारणा प्रोटोटाइप का एक छोटा सा प्रमाण ऊपर मार पड़ी है, कि एक अन्य उपयोगकर्ता के रूप calc.exe चलाने चाहते हैं,। यह ठीक काम करता है जब मैंने इसे के रूप में निष्पादित किया (एक बल्कि व्यर्थ अभ्यास, मुझे स्वीकार करना होगा), लेकिन जब मैंने एक नया उपयोगकर्ता बनाया और उसे उसके रूप में चलाने की कोशिश की, तो मैंने Win32Exception पर ठोकर खाई कि शिकायत नाम अमान्य है , मूल त्रुटि कोड 267. मुझे तत्काल परेशान था, क्योंकि मुझे पता नहीं था कि निर्देशिका नाम जो अवैध हो सकता है। मैंने फिर एक एक्सपी मशीन पर कोड का परीक्षण किया और यह काम किया!

मैंने उस त्रुटि की कई रिपोर्टों का कोई फायदा नहीं हुआ, लेकिन कोई निर्णायक समाधान नहीं, या विभिन्न संदर्भों पर। अंत में, के बाद एक जबकि यह मुझ पर लगा, मैं ProcessStartInfo वर्ग के WorkingDirectory संपत्ति को निर्दिष्ट नहीं किया गया था, जैसे ही मैं लाइनों

FileInfo fileinfo = नए FileInfo (पथ) जोड़ा गया; startInfo.WorkingDirectory = fileInfo.DirectoryName;

मेरे कोड पर, इसे उपयोगकर्ता में लॉग इन से अलग कोड चलाने की अनुमति थी। ...