🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Q&A

解決済

1回答

1695閲覧

cmd.exe から PostgreSQLの操作をしたい

nekosuke123

総合スコア6

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

0グッド

0クリップ

投稿2020/12/23 07:15

編集2020/12/24 00:05

前提・実現したいこと

C#でPostgreSQLに対して操作をしたいのですがエラーになってしまいます。

該当のソースコード

private void Button_Click(object sender, RoutedEventArgs e) { System.Diagnostics.Process p = new System.Diagnostics.Process(); p.StartInfo.FileName = System.Environment.GetEnvironmentVariable("ComSpec"); p.StartInfo.UseShellExecute = false; p.StartInfo.RedirectStandardOutput = true; p.StartInfo.RedirectStandardInput = false; p.StartInfo.CreateNoWindow = true; p.StartInfo.Arguments = @"/c psql --version /w"; p.Start(); string results = p.StandardOutput.ReadToEnd(); p.WaitForExit(); p.Close(); Console.WriteLine(results);       }

出力結果・エラーメッセージ

'psql' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。

試したこと

調べた結果パスが通ってない場合にこのようなメッセージが表示されるという情報を多く見たのですが、パスは通っており、クライアントから直接コマンドプロンプトを開き、"psql --version"と入力した場合には正常にバージョンが表示されます。
プログラムを通してコマンドプロンプトを動作させるときのみこのようなメッセージが表示されてしまうのはなぜでしょうか。Pathはwindowsの環境設定にて通しました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/12/23 10:11

パスを通したやり方が間違っていないか、どうやって足したか、どうたされたことを確認したのかも示してください。システム環境変数のPATHの修正をしたのですか?
YT0014

2020/12/23 10:52

pathの設定などを含む環境変数は、プロセス毎に異なる場合があります。 psqlの呼出しの代わりに、setコマンドを用いて、コード内のプロセスの環境変数をご確認ください。
otn

2020/12/23 11:21

psqlをフルパスで書けば良いのでは? そもそも、cmd.exeを経由せず直節psqlを起動すれば良いと思いますが。
nekosuke123

2020/12/24 00:09

>m6u 質問にも追記させていただきましたが、windowsの環境変数のパスにPostgreSQLのパスを追加しました。
nekosuke123

2020/12/24 00:10

>YT0014 実行時のパスにも確かにPostgreSQLのパスが入っていました…
kikukiku

2020/12/24 00:15

下記の順で確認してみては? 1.アプリを使わずにコマンドラインから下記を実行   フルパス\psql.exe --version 2.上記1が動作したら、アプリから下記を実行   p.StartInfo.Arguments = @"フルパス\psql.exe --version";
nekosuke123

2020/12/24 00:18

>otn 「C:\Program Files\PostgreSQL\10\bin\psql.exe」 フルパスとはこの書き方で会ってますでしょうか?このコマンドはコマンドプロンプトで入力しても質問と同じエラーが出てしまいます。 >そもそも、cmd.exeを経由せず直節psqlを起動すれば良いと思いますが。 クライアントからサーバーのPostgreSQLのDBを操作しようとしています。そのためcmd.exeを経由して っ接続を試みていたのですが直接psqlを起動するというのはどのような方法でしょうか?
kikukiku

2020/12/24 00:20

上記2は間違え、下記で差し替えてください。 System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo(); psi.FileName = "フルパス\psql.exe"; psi.Arguments = @"--version"; System.Diagnostics.Process.Start(psi);
nekosuke123

2020/12/24 00:22

>kikukiku すみません。コマンドラインからフルパスで実行するとエラーになってしまうのですが、やはりパスをちゃんと設定できていないのでしょうか…?
kikukiku

2020/12/24 00:24

フルパス内にスペースが含まれる場合、ダブルクォーテーションが囲ってください。 "C:\Program Files\PostgreSQL\10\bin\psql.exe"
退会済みユーザー

退会済みユーザー

2020/12/24 00:30

ユーザー環境変数とシステム環境変数の2種類があることにここまで触れていないけど、まぁいいや。
kikukiku

2020/12/24 00:50

m6uさんへ 動作させることを先に確認してから、 パスのことをゆっくりやればいいんじゃないかと思っていました。 ご指摘の通りだと思います。
YT0014

2020/12/24 01:02

"実行時のパス"とは、何でしょうか? ご提示いただいているC#のコード内で、setを実行した結果のPATHに、該当パスがあったということですか? また、この欄での提案とその結果に関しては、質問を編集し、試した事に追記してください。
YT0014

2020/12/24 01:04

エラーメッセージが同一であれば、このままで良いかと。
otn

2020/12/24 01:53

> 直接psqlを起動するというのはどのような方法でしょうか? p.StartInfo.FileName = psqlのフルパス; 中略 p.StartInfo.Arguments = @"/--version /w";
guest

回答1

0

自己解決

フルパスでpsqlの実行を行うことでバージョンを表示することができました。

p.StartInfo.Arguments = @"/c psql --version /w";

p.StartInfo.Arguments = @"/c フルパス/psql --version /w";

投稿2020/12/24 01:15

nekosuke123

総合スコア6

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問