質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.35%
C#

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

Q&A

解決済

1回答

3467閲覧

管理者権限が必要なプログラムの標準出力をリダイレクトする方法

退会済みユーザー

退会済みユーザー

総合スコア0

C#

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

0グッド

0クリップ

投稿2020/10/29 06:38

環境

Windows 10 Pro 64bit
Visual Studio 2019
言語 C#

やりたいこと

管理者権限を持たない Windows Form アプリから、
IPアドレスを変更する実行ファイル(管理者権限が必要)を実行し、
その標準出力を Windows Form アプリへリダイレクトする。

詳細

外部プログラムの標準出力をリダイレクトするプログラムとして、
以下の様なプログラムを作成しました。

C#

1static void Main() 2{ 3 string cmd = @"管理者権限が必要なプログラム"; 4 5 Process p = new Process(); 6 7 p.StartInfo.FileName = cmd; 8 p.StartInfo.CreateNoWindow = true; 9 p.StartInfo.UseShellExecute = false; 10 p.StartInfo.Arguments = @"コマンドライン引数"; 11 p.StartInfo.RedirectStandardOutput = true; 12 13 p.Start(); 14 string output = p.StandardOutput.ReadToEnd(); 15 16 output = output.Replace(@"\r\r\n", @"\n"); 17 Console.WriteLine(output); 18}

こちらのプログラムは問題なく動作しています。

しかし、外部プログラムを管理者権限で実行するためには UseShellExecute を true にする必要がありますが、
そうすると、標準入力をリダイレクトすることができません。

この点は仕様上どうすることもできない様で、
他の手段を探してみましたが、目ぼしいものが発見できませんでした。

知りたいこと

上述の手段以外で、やりたいことを実現できる方法。

その他

Windows Form アプリですが、
スタートアップに登録してタスクトレイに常駐させる様な用途で考えています。

つきまして、Windows Form アプリに管理者権限は付与しない方針です。

一応、Windows Form アプリに管理者権限を付与して、
タスクスケジューラからログオン時に起動する方法も考えましたが、
ユーザへの配布の際にタスクスケジューラへの登録用プログラムも必要になる工数を考慮すると、
あまりこちらの方法は気乗りせず、他に手段がないかと質問した次第です。

以上を踏まえまして、実現可能な手段や何らかのアイディアをお持ちの方がおりましたら、
ご回答頂けますと幸甚です。

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

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

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

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

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

Zuishin

2020/10/29 07:06

タスクスケジューラから起動しましょう。工数は問題になりません。
退会済みユーザー

退会済みユーザー

2020/10/29 07:13

やはりそれが無難でしょうか。 他に方法があればとは思いましたが、 他の方法が無ければその方法で進めるつもりです。 もう少し他の方の回答を待ってみます。
YAmaGNZ

2020/10/29 07:36

結果をファイルにリダイレクトしてそれを読み込むのはどうですか?
退会済みユーザー

退会済みユーザー

2020/10/29 07:42

ご提案ありがとうございます。 それは盲点でした。 確かに、それなら実装可能ですね。 その形で実装が完成したら本件を解決としたいと思います。
guest

回答1

0

ベストアンサー

アドバイスを賜りまして、
以下の形で実装することと致しました。

1.外部ファイルの出力を一時ファイルへリダイレクトする。
2.一時ファイルの内容を Windows Form アプリから読み込む。

ご助力を頂きましたお二方、本当にありがとうございました。

投稿2020/10/29 08:08

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問