問題タブ [processstartinfo]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
.net - ClickOnceアプリケーションは、ClickOnceアプリケーションに関連付けられた* .abcを使用してProcess.Start( "x.abc")を介して開始されません
たとえば、関連するファイル拡張子を登録するClickOnceアプリケーションの開発と展開に成功しました*.abc。名前の付いたファイルをクリックするx.abcかx.abc、コマンドプロンプトから入力すると、ClickOnceアプリケーションが起動し、専用のAPIを介してファイルを取得できます。次のコードを使用して、プログラムでアプリケーションを起動することもできます。
私のWindowsVista64ビットボックスではすべて正常に動作します。
ただし、Windows 7(これも64ビット)でまったく同じことを実行しようとすると、非常に奇妙な問題が発生します。これが私が観察するものです:
x.abcエクスプローラーからダブルクリックして手動で起動することができます。x.abcコマンドプロンプトからの手動起動が機能します。Process.Start("x.abc")アプリケーションを起動しません。ただし、返されたプロセスオブジェクトは、エラーがなく、ClickOnceアプリケーションが何らかの理由ですぐに終了したことを示しています。ただしTrace、ClickOnceアプリケーションの最初の段階でさえ到達することはありません。- まだ見知らぬ人ですが、1行を含む
Process.Start("x.bat")ファイルでは、ClickOnceアプリケーションも起動しません。同じことがエクスプローラーの作品から始まりました(もちろん)。x.batx.abcx.bat
ProcMon私の観点からすると、アプリケーションを起動するClickOnceプロセスを追跡するのは非常に難しいため、何が起こっているのかを分析しようとしてもあまり役に立ちませんでした。私は仕事に取り掛かることを観察rundll32しますが、失敗の証拠はありません。
を実行しているプログラムProcess.Startは、まったく凝ったものがない完全な信頼コンソールアプリケーションです。
ClickOnceアプリケーションがWindows7でどのように処理されるかに関して何が変わったのかProcess.Start、また、エクスプローラーからファイルを起動するのとまったく同じように動作しないのはなぜかわかりません。Startメソッドのより高度なバージョンを使用しProcessStartInfo、に設定UseShellExecuteしても効果trueがなかったことは言及する価値があります。
最初に起動cmdしてProcess.Startから起動しようとすると、x.abcまったく同じ問題が発生します。環境設定をcmd手動で開始したものと比較すると、ProgramFiles定義方法に違いがあります(最初の設定はを指しC:\Program Files (x86)、2番目の設定はを指しC:\Program Filesます)。.NETアプリケーションから開始されたアプリケーションは、32ビットエミュレーションレイヤー(SysWoW64)で開始されます。
x.abc32ビットバージョンのコマンドプロンプト(つまり、%windir%\SysWoW64\cmd.exe)を起動し、プロンプトで入力することで、の起動の失敗を再現することができましx.abcた。%windir%\Sysnative\cmd.exe /C x.abcまた、醜い回避策を見つけました。これは、の代わりにを起動して、32ビット環境から64ビットのコマンドプロンプトを開始することですx.abc。
しかし、私はむしろそれを行うためのクリーンな方法を使用したいと思います(または、Microsoftの担当者に、これは確かにWindows 7やClickOncceの問題であり、まもなく修正されると教えてもらいます)。
process - System.Diagnostics.WorkingDirectoryのプロセスの問題
サードパーティのソフトウェアツール(コマンドラインツール)を使用してPDFファイルをマージしています。C#を使用System.Diagnostics.Processして実行可能ファイルを実行しようとしていますが、パラメーターの設定に応じていくつかのエラーが発生します。
- もし私
UseShellExecute = trueがRedirectStandardOutput = true得るなら:- IOストリームをリダイレクトするには、Processオブジェクトの
UseShellExecuteプロパティをに設定する必要があります。false
- IOストリームをリダイレクトするには、Processオブジェクトの
- もし私
UseShellExecute = trueがRedirectStandardOutput = false得るなら:- システムは、指定されたファイルを見つけることができません
- もし私
useShellExecute = falseがRedirectStandardOutput = true得るなら:- システムは、指定されたファイルを見つけることができません
- もし私
UseShellExecute = falseがRedirectStandardOutput = false得るなら:- システムは、指定されたファイルを見つけることができません
実行中のコードは次のとおりです。
誰かが私がこの問題を回避するのを手伝ってもらえますか?
c# - ProcessStartInfo を使用してバッチ ファイルを実行するにはどうすればよいですか?
しかし、それは機能しません。つまり、Java コードは実行されません。Windowsエクスプローラーでクリックしたとき、またはコマンドラインで実行したとき、バッチファイルは正常に実行されますが..
バッチ ファイルが 1 つの DOS コマンドである場合、これは正常に機能するため、Java コードの実行に約 20 分かかるという事実に関係していると思います。次のコードを使用しています
私は何を間違っていますか?
c# - 引数によっては、プログラムによる CLI アプリケーションの起動が機能しない
plink.exeSSH リバース トンネルを確立するために C# アプリケーションから (PuTTY リンク、コマンド ライン ユーティリティ/PuTTY のバージョン)を起動しようとしましたが、正しいパラメーターを渡すとすぐに機能しなくなりました。
どういう意味ですか?-pw以下は期待どおりに機能します。コマンド ライン ウィンドウが開き、引数 quitのパスワードを渡すのを忘れたことが表示され、プロンプトが表示されます。私が提供しなかったものを具体的に要求しているので、引数があることはわかっています。
plink.exeの代わりに直接呼び出すことで同じことを考えてみましたcmd.exe /kが、ウィンドウがすぐに閉じてしまい、バグハンティングには残念です。
しかし、引数にパスワードを渡すとplink.exe、プログラムのヘルプ (使用可能なパラメーターを表示) が表示され、終了します。
パラメータが欠落している兆候はありません。cmd /kバリアントとバリアントの両方がplink.exe機能しません (後者はすぐに閉じられるため、異なる動作に関する情報はありません)。
同じパラメーターを使用して Windows 7 のスタート メニュー ランチャーからアプリケーションを起動すると、cmd.exeウィンドウが開き、要求どおりに接続が確立されます。
どうしたの?plink.exe実際のシェルで実行されていないことに気付く方法はありますか? はいの場合、スタートメニューの「プロンプト」のように、どうすれば回避できますか?
この質問が SO に当てはまることを願っています。これは、特に単一のアプリケーション向けではありますが、プログラムで正常に起動することを中心に展開しているためです。
c# - C# のインタラクティブ コンソール I/O ラッパー/インターセプター - 問題は何ですか?
SO や他のサイトで見つけたいくつかのコード サンプルをリミックスして、週末に C# でインタラクティブなコンソール インターセプター/ラッパーをまとめようとしていました。
私が今持っているものでは、コンソールから確実に読み返すことができません。簡単な指針はありますか?
私は何を達成しようとしていますか?これは小さなユースケースです。2 つのテキスト ボックスがあるとします。
c# - C# - 目に見えないプロセスを起動する (CreateNoWindow & WindowStyle が機能しない?)
.NET で作成した 2 つのプログラム (.exe) があります。それらをマスターとワーカーと呼びます。マスターは 1 つ以上のワーカーを開始します。Worker はユーザーが操作することはありませんが、コマンドを受け取り、Master から受け取ったコマンドに基づいて WinForms コンポーネントを実行する WinForms アプリです。
Worker アプリを完全に非表示にして実行したい(もちろん、タスク マネージャーに表示されることを除く)。StartInfo.CreateNoWindowプロパティとStartInfo.WindowStyleプロパティを使用してこれを実現できると思っていましたが、フォームに Client.exe ウィンドウとコンポーネントがまだ表示されています。ただし、タスクバーには表示されません。
Client.exe を実行させて表示させないようにするにはどうすればよいですか? ㅤㅤㅤㅤㅤ</p>
.net - プロセスを同期的に開始し、出力を「ストリーミング」する
F# からプロセスを開始しようとしていますが、終了するまで待ちますが、出力を徐々に読みます。
これは正しい/最善の方法ですか?(私の場合、gitコマンドを実行しようとしていますが、それは質問に接しています)
私が理解していないのは、proc.Start() がどのようにブール値を返すことができるか、そして同時に出力を段階的に取得するのに十分なほど非同期になるかということです。
残念ながら、私は現在、物事がどのような順序で起こっているのかを知るのに十分な大きさのリポジトリ、または十分に遅いマシンを持っていません...
アップデート
ブライアンの提案を試してみましたが、うまくいきます。
私の質問は少し曖昧でした。私の誤解は、 Process.Start() が「開始」だけでなく、プロセス全体の成功を返すと想定していたため、それがどのように機能するかわかりませんでした。
.net - git->Process->gitラウンドトリップテキストエンコーディング
カスタムソース管理からgitにコードを移行するユーティリティを作成しようとしています。
古いシステムの「commit」メッセージはプロジェクトパスのテキストファイルに段階的に追加されたため、gitを使用してこれらのファイルをあるバージョンから次のバージョンに差分し、その差分をコミットメッセージとして使用しています。
当然のことながら、アクセントに問題があります。
テスト文字列は次のとおりです。éèàçüûöôëê
- ソーステキストファイルは(Notepadが教えてくれます)「ANSI」にあります。
- msysgitでdiffを実行すると、これが表示されます
<E9><E8><E0><E7><FC><FB><F6><F4><EB><EA> - 同じdiffコマンドを使用してgitへのProcess呼び出しを実行すると(この質問を参照)、次のようになります。
ÚÞÓþ³¹÷¶ÙÛ����������と、この質問StandardOutputEncoding = Encoding.UTF8ごとに。éèàçüûöôëêとStandardOutputEncoding = Encoding.Default
これまでのところ、とても良いですがéèàçüûöôëê、コミットメッセージとして返送すると、gitは私に教えてくれますWarning: commit message does not conform to UTF-8.
これを機能させる方法についてのポインタはありますか?この質問では、StandardInputでのエンコーディングの設定についても説明していますが、コミットメッセージは引数にあり、入力の一部ではありません。
(Gitは、構成変数を設定できるとも言っていますi18n.commitencodingが、可能であればgit形式を尊重したいと思います)
c# - UseShellExecute=falseでは特権の昇格は機能しません
昇格された特権でウィンドウを非表示にして、子プロセス(実際には同じコンソールアプリ)を開始したいと思います。
次に行います:
そしてこれは機能します:
しかしUseShellExecute = true、新しいウィンドウが作成され、出力をリダイレクトすることもできません。
だから私が次にするとき:
これは特権を昇格させず、上記のコードはfalseを返します。なぜ??
c# - C# - 空白のパスワードを持つユーザーとして新しいプロセスを実行する
Windows 7 マシンで別のローカル ユーザーとして実行する必要があるメイン アプリケーションから生成した子プロセスがあります。そのユーザー アカウントにパスワードを設定したくないのですが、偽装を使用して新しいプロセスを作成すると、空白のパスワードや任意の種類の null 値が許可されないようです。これが可能かどうか知っている人はいますか?
以下は、空白の文字を渡す私の試みでした:
編集:受け取ったエラーメッセージ
Logon failure: user account restriction. Possible reasons are blank passwords not allowed, logon hour restrictions, or a policy restriction has been enforced