簡體   English   中英

Win32Exception:目錄名無效

[英]Win32Exception: The directory name is invalid

我正在嘗試作為一個不同的用戶運行一個進程,該用戶在運行Vista並啟用了UAC的2台不同計算機上具有管理員權限但在其中一個中我得到一個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);

UPDATE

執行上述代碼的應用程序具有requireAdministrator執行級別。 我甚至將工作文件夾設置為“Path.GetDirectoryName(myFile)”“New System.IO.FileInfo(myFile).DirectoryName”

您需要指定ProcessStartInfo`的WorkingDirectory屬性。 Win32Exception錯誤代碼267“目錄名稱無效”

我目前正在開發“自動運行為”工具。 它的目標是幫助管理員,像我一樣,必須為用戶提供以管理員身份執行一個或兩個程序的方法,並且希望這樣做而不必放棄管理員的密碼。

所以,我正在開發Vista,我剛剛發布了一個小概念證明原型,即使用ProcessStartInfo和Process將calc.exe作為不同的用戶運行。 當我像我一樣執行它時這很好用(我必須承認這是一個相當無意義的練習),但是當我創建一個新用戶並試圖像他一樣運行它時,我偶然發現Win32Exception抱怨目錄名無效,本機錯誤代碼267.我當時感到困惑,因為我知道沒有提供的目錄名可能無效。 然后我在XP機器上測試了代碼並且它工作了!

我開始搜索它無濟於事,許多關於該錯誤的報告但沒有確定的解決方案,或在不同的背景下。 最后,經過一段時間我突然意識到,我沒有指定ProcessStartInfo類的WorkingDirectory屬性,只要我添加了這些行

FileInfo fileInfo = new FileInfo(path); startInfo.WorkingDirectory = fileInfo.DirectoryName;

對於我的代碼,允許運行代碼與登錄用戶不同。 ...

目錄是登錄用戶的映射主文件夾還是低於該目錄? 這篇知識庫文章可能會有所幫助:

使用Windows中的“運行方式”功能啟動Cmd.exe或Notepad.exe時“目錄名無效”錯誤消息

更新:請注意,作為本地管理員組的成員並具有管理權限在Vista上是不同的。

我認為當您以管理員身份運行C#應用程序時,一切正常。 右鍵單擊可執行文件,然后選擇以管理員身份運行 ,或者從提升的命令提示符啟動應用程序(獲取一個應用程序的最快方法是按Start ,輸入'cmd',然后按Ctrl+Shift+Return )。

或者,作為替代方案,為運行該進程的帳戶禁用UAC。

嘗試更換

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

pInfo.WorkingDirectory = Path.GetDirectoryName(myFile);

FileInfo可以訪問文件系統,我認為只有admin用戶才能訪問該目錄。 如果它不能解決您的問題,至少它會使您的代碼更快一點......

這是因為文件的路徑長度超過255個字符。

這是由於文件夾名稱中的空格。 一旦我刪除了空間,當我遇到這個問題時它開始工作文件。

我有類似的經歷,結果證明我們的開發環境存在問題。 我們使用subst命令將源代碼目錄映射到虛擬驅動器。 因此,FileName和WorkingDirectory屬性被設置為“W:\\ SomeFolder \\ FileName.exe”

當我硬編碼FileName和WorkingDirectory以通過我的實際磁盤(C :)訪問文件時,我停止接收“無效目錄”異常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM