14

Vista を実行し、UAC が有効になっている 2 台の異なるコンピューターで管理者権限を持つ別のユーザーとしてプロセスを実行しようとしていますが、そのうちの 1 つで「ディレクトリ名が無効です」という 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)」「New System.IO.FileInfo(myFile).DirectoryName」に設定しました

4

6 に答える 6

5

これは、ファイルのパスの長さが 255 文字を超えているためです。

于 2010-04-12T12:20:11.063 に答える
4

交換してみる

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

pInfo.WorkingDirectory = Path.GetDirectoryName(myFile);

FileInfo はファイルシステムへのアクセスを作成し、管理者ユーザーのみがそのディレクトリにアクセスできると仮定します。問題が解決しない場合は、少なくともコードが少し速くなります...

于 2009-06-13T13:16:44.617 に答える
3

ディレクトリは、ログオンしているユーザーのマップされたホーム フォルダーですか、それともその下にありますか? このナレッジ ベースの記事よりも役立つ場合があります。

Windows で実行機能を使用して Cmd.exe または Notepad.exe を起動すると、「ディレクトリ名が無効です」というエラー メッセージが表示される

更新:ローカル管理者グループのメンバーであることと、管理者権限を持つことは、Vista では同じではないことに注意してください。

C# アプリケーションを管理者として実行すると、すべてが正常に機能すると思います。実行可能ファイルを右クリックし、[管理者として実行] を選択するか、管理者特権でのコマンド プロンプトからアプリケーションを起動します ( [スタート]を押して、'cmd' と入力し、続いてCtrl+Shift+Return.

または、別の方法として、そのプロセスを実行しているアカウントの UAC を無効にします。

于 2009-06-13T12:47:28.383 に答える
2

フォルダ名のスペースが原因です。スペースを削除すると、この問題が発生したときにファイルが機能し始めました。

于 2010-12-08T21:36:07.803 に答える
2

私も同様の経験をしましたが、開発環境の問題であることが判明しました。subst コマンドを使用して、ソース コード ディレクトリを仮想ドライブにマップします。そのため、FileName および WorkingDirectory プロパティは "W:\SomeFolder\FileName.exe" に設定されていました。

実際のディスク (C:) を介してファイルにアクセスするように FileName と WorkingDirectory をハードコーディングすると、「無効なディレクトリ」例外が発生しなくなりました。

于 2011-08-09T16:31:12.150 に答える