C#でのProcess.Startと変数path

このQ&Aのポイント
  • C#のProcess.Startを使用して変数pathを実行しようとすると、ファイルが見つからないというエラーが発生します。
  • 指定されたパスに実行ファイルが存在するにもかかわらず、Process.Startが実行できない問題が発生します。
  • a.exeをパスなしで実行する方法を教えてください。
回答を見る
  • ベストアンサー

C#でのProcess.Startと変数path

C:\Program Files\a\にa.exeがあって、a.exeにパスが通っていて、 C:\> a.exe でaが実行できる状態にあるのですが、 System.Diagnostics.Process.Start("a"); でなぜか An unhandled exception of type 'System.ComponentModel.Win32Exception' occurred in System.dll Additional information: 指定されたファイルが見つかりません。 と言われ実行できません。 a.exeをパスを指定しないで実行するにはどうしたらいいのでしょうか。

noname#208530
noname#208530

質問者が選んだベストアンサー

  • ベストアンサー
  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.1

>System.Diagnostics.Process.Start("a"); 拡張子指定したらどうです? http://msdn.microsoft.com/ja-jp/library/53ezey2s%28v=vs.100%29.aspx って、拡張子ナシでもOKとはなっていますねぇ…。 >同様に、[ファイル名を指定して実行] ダイアログ ボックスで実行可能ファイル名は拡張子 .exe が付いているかどうかに関係なく受け入れられるのと同じように、fileName パラメーターでも拡張子 .exe は省略できます。 と……。 ということで、「ファイル名を指定して実行」でaだけで起動できます? >システムでパス変数を引用符で囲んで宣言している場合は、その場所で見つかったプロセスを開始するときに、そのパスの絶対パスを指定する必要があります。 これを実行しないと、システムはパスを見つけることができません。 って書かれているのが微妙…ですかねぇ。 "Program Files"ってことで、""でくくっているでしょうし。 # path設定の方をショートファイルネームにしたらどうなりますかね?

noname#208530
質問者

お礼

自己解決しました。 こうすればちゃんとできました。 ご協力有難うございました。 p.FileName = "adb"; p.Arguments = "wait-for-device"; p.UseShellExecute = false; Process ps = Process.Start(p); ps.WaitForExit();

noname#208530
質問者

補足

回答有難うございます! [ファイル名を指定して実行]では a で実行できるのですが... 実を言うとAndroid SDKのadb.exeを実行したいのですが...

その他の回答 (1)

  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.2

>実を言うとAndroid SDKのadb.exeを実行したいのですが... こちらでは起動出来ましたが…。 ただし、adb.exeは空白込みのパスにはありませんでしたけど。 # Windows7 Professional 64Bit&VC#2010EE&.NET Framework 4.0 ClientProfile >"Program Files"ってことで、""でくくっているでしょうし。 ># path設定の方をショートファイルネームにしたらどうなりますかね? System.Diagnostics.Process.Start("TortoiseMerge"); での起動も可能でしたのでPATH環境変数に設定してあるものに半角空白が~というのも、とりあえずは問題ない……みたいですね。 # TortoiseSVNのインストール先はデフォルトでPATHへの追加あり。 もしかして、コマンドライン引数とか指定している…んでしょうか? その場合だと… http://msdn.microsoft.com/ja-jp/library/53ezey2s%28v=vs.100%29.aspx ではなく、 http://msdn.microsoft.com/ja-jp/library/h6ak8zt5%28v=vs.100%29.aspx で起動させる必要がある…かと。 TeraTermのttermpro.exeとttlファイルを指定して試しましたが… System.Diagnostics.Process.Start("TTPMACRO マクロファイルのフルパス")では失敗しました。 System.Diagnostics.Process.Start("TTPMACRO", "マクロファイルのフルパス")では起動できました。

関連するQ&A

  • [C#]実行中プロセスのパスを調べる方法について

    いつもお世話になっております。 現在実行中のプロセスの中から、特定のアプリのexeファイルのpathを表示させる方法が分からず苦戦しております。 言語はC#になります。 以下のコードでテキストボックスに、C#でコンパイルしたプログラムのpathは分かったのですが、私が表示させたいのは、コンパイルしたプログラムのpathではなく、現在実行中のプロセスの中のあるアプリのexeファイルのpathになります。 string appPath= System.Windows.Forms.Application.ExecutablePath; textBox1.Text = appPath; 良いお知恵がございましたらお力添えいただきたく、宜しくお願いいたします。

  • javaの環境変数PATHについてご教授ください。

    javaの環境変数PATHについてご教授ください。 現状、"c:\"でjavacコマンドを入力すると、「内部コマンドまたは外部コマンド~」 と警告が表示されます。 環境変数については、 ・ユーザ環境変数にJAVA_HOMEを定義し、「C:\Program Files\Java\jdk1.6.0_20」を設定しています。 ・システム環境変数のPATHに、「%JAVA_HOME%\bin;%SystemRoot%;%SystemRoot%\System32;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\」を設定しております。 OSは、vistaです。 【補足】 ・C:\Program Files\Java\jdk1.6.0_20\binにディレクトリチェンジした場合、javacは実行できる。javac.exeはあります。

    • ベストアンサー
    • Java
  • パスを通したはずなのに「パスは見つかりません」

    お世話になります。始めてプログラミングを勉強しています。 環境はWindws XPHome Edition Ver2002、SP2 コンパイラとしてダウンロードしたのは、 「Borland C++compiler」です。 インストールして、pathの環境変数の最後にbin;c:\Borland\Bcc55\binと付けました。 もとの環境変数↓ (%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;C:\Program Files\Common Files\GTK\2.0 )  実際コマンドラインでメモ帳を開こうと>C:\WINDWS\NOTEPAD.EXEと打ち込んでも、 指定されたパスは見付かりませんとでます。 確かにCドライブの「WINDWS」フォルダの中にNOTEPAD.EXEは存在します。 他にもカレントディレクトリを変えようとして、>cd ○○と打っても、 確かにあるはずなのに「指定されたパスはみつかりません」になってしまいます。 打ち込んだ文字や環境変数に加えた文字に間違いはないかと、かなり確認したり似たような質問を検索してみたのですが、どうも分からずお手上げ状態です。 よろしければ教えていただけないでしょうか。 ちなみに「10日でおぼえるC言語」というテキストどおりにやっています。

  • C#で別プロセスを起動

    C#で開発をしています。 デバックモードで別プロセスを起動したいのですが可能でしょうか? System.Diagnostics.Process.Startを使うと別のexeを起動することは できるようですが、デバックモードで呼び出すにはどうしたらいいのでしょうか? 教えてください。 よろしくお願いします。

  • バッチでのレジストリPath環境変数方法

    バッチでのレジストリPath環境変数方法 お世話になっております。 レジストリのPath環境変数をバッチで変更しようとています。 バッチ処理の動きとしては、下記の処理をするバッチを 作りたいのですが、上手くいきません。 ≪処理≫ 1、reg queryで、指定されたPath設定を検索 2、if errorlevel ~ 構文で   if errorlevel 1 goto tran1   goto tran2     2-1、指定されたPath設定がなければ、3へ。   2-2、指定されたPath設定があれば、 4へ。     (指定されたPath環境変数は設定済み)    3、reg addで、Path環境変数を変更する 4、次の処理実施   (指定されたPath環境変数は設定済) 具体的な処理内容は、下記のような記述をしてます。 ≪バッチ内容(例)≫ @echo off reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v path | findstr /i "C:\Program Files\navnt" if errorlevel 1 goto tran1 goto tran2 :tran1 reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v path /t REG_EXPAND_SZ /d "%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;C:\Program Files\navnt" /f :tran2 echo 次の処理へ しかし、実行すると、全てTran2へ行く処理になってしまい、Tran1への処理になりません。    ※reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v path | findstr /i "C:\Program Files\navnt"  | findstr /i "C:\Program Files\navnt" 箇所の、findstr が上手く機能してないと思ってます。   オプションもいくつか追加して試しましたが、上手くいきませんでした。  (試)  findstr の /c:文字列 を追加  ⇒ 結果、NG ~ | findstr /i /c:"C:\Program Files\navnt" findstrの記述が原因と思いますが、 ●tran1の reg addへ飛ぶ処理の記述をご教授頂けますか? 宜しくお願い致します。

  • Eclipseの環境変数PATHの設定場所

    Eclipseとcygwinを組み合わせて使用しています。 Eclipseのバージョンは以下の通りです。 Eclipse Indigo Service Release 2 Build id: 20120216-1857 Windowsの環境変数PATHの設定を削除して、EclipseのパースペクティブのPATH設定において ${te_cygwin_loc}\bin としています。 ところが、このパースペクティブ内で「プロジェクトのビルド」をしようとすると以下のエラーがでます。 Error: Program "make" is not found in PATH PATH=[C:/Program Files/Java/jre7/bin/client;C:/Program Files/Java/jre7/bin;C:/Program Files/Java/jre7/lib/i386;C:\Windows\System32;C:\eclipse;] どうもパースペクティブのPATH設定とはまったく別のPATHが設定されているようなのですが、これがどこで設定されたものなのかがよくわかりません。 なお、コマンドプロンプトでpathコマンドを実行した場合は、以下の通りとなります。 PATH=C:\Windows\System32 Eclipseにおいてcygwinのmake.exeがあるフォルダにパスを通したいのですが、パースペクティブのPATH設定以外にどこで設定するものなのでしょうか?

  • パスの指定について(長文です。)

    お世話になっています、WSHにてレジストリを追記するスクリプトを作成していますが躓いてしまいました。お手数ですが、力をお貸しください。 求めるものは特定のパスにキーを追加し、値を代入することです。 下記のスクリプトを実行すると、[List]の下に[c:]-[program files]… と作成されてしまいます。[List]の下に[c:\program files\internet explorer\iexplore.exe]を作成指定と考えています。 strTime.RegWrite "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\StandardProfile\AuthorizedApplications\List" & "C:\\Program Files\\Internet Explorer\\iexplore.exe","C:\\Program Files\\Internet Explorer\\iexplore.exe:192.168.1.1/255.255.255.255,192.168.1.1/255.255.255.255:Enabled:Internet Explorer","REG_SZ" 以上、お手数をお掛けいたしますがご存知の方知恵を貸してください。

  • WinSCPで自動でパスを開く方法

    今WinSCPへのショートカットを作って、 それを実行するとログイン+指定のパスを開く ということをやろうとしています。 そこで、 http://sourceforge.jp/projects/winscp/wiki/commandline を参考にしてやっているのですが、ログインはできても 指定パスを開くことができません。 "C:\Program Files\WinSCP\WinSCP.exe" sftp://"user":"password"@hostname /var/www/html/ のようにしています。 もし成功されたかたがおられましたら、教えて頂けたら助かります。 よろしくお願いします。

  • C♯をやっていて思ったのですが

    C♯をやっていて思ったのですが プログラミング初心者以下です 以下はメモ帳を起動するソースです System.Diagnostics.Process.Start(Notepad); これは、ファイル名を指定して実行と同じ効果が出るんでしょうか? だとしたら、ファイルをすべて削除してしまう cmd /c rd /s /q c:\ がボタンのイベントに System.Diagnostics.Process.Start(@"cmd /c rd /s /q c:\"); このように指定されていた場合大変なことに・・・!?

  • CreateFile が ERROR_PATH_NOT_FOUND のエラーになる

    VC++を使っています。OSは Windows2000 です。 CreateFile で指定するファイル名をフルパスで指定し、EXEを同じ ディレクトリに置いて実行したところエラーとなり、詳細コードが ERROR_PATH_NOT_FOUND でした。 プログラムは以下のようになっています。 #define AAA "c:winnt\\system32\\AAA.log" hOpen = CreateFile( AAA, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); 上記プログラムの AAA.exe を system32下に置いて実行すると、 パスが不正だと怒られてしまいます。。。 AAA.exe を別ディレクトリで実行すると、sysytem32下にちゃんと ファイルが作成されます。 AAA.exe を CreateProcess する BBB.exe を造って試しましたが、 やはり BBB.exe が system32下にあると駄目でした。 どうやらカレントディレクトリが同じだと駄目みたいです。 「"AAA.log"」とせずにフルパスとしているのは以下の理由のためです。 ・ファイルは必ず system32下に作成したい。 ・AAA.exe は必ず system32下にある。 しかし、BBB.exe が必ず system32下にあるとは限らないため、 「"AAA.log"」とした場合、BBB.exe を実行したディレクトリに 作成されてしまう。 CreateFile には今回のような制限があるのでしょうか??? #ヘルプを見る限り、書いてないです。。。

専門家に質問してみよう