問題タブ [shellexecuteex]
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.
vb6 - VB6 - サービスとして実行されているアプリからファイルを開く方法
私はこの問題にほぼ1週間苦労しています。ファイルを開くサービスとして実行されている vb6 アプリケーションが必要です。ファイルに対して何もする必要はありません。開くだけで済みます。ShellExecute と ShellExecuteEx を使用するだけでなく、CreateProcess を使用してコマンドラインからファイルを起動しようとしました。これらの実装のいずれも機能しなかった場合、代わりに別のアプリケーションを (CreateProcess を使用して) 起動して、ファイルを開き、それ自体を閉じるという唯一のタスクを試みました。
これらのソリューションはすべて、アプリケーションが正常に実行されている場合は機能しますが、サービスとして実行されている場合は機能しません。アプリケーションがサービスとして実行されている間、直接的または間接的にファイルを開くことができることは非常に重要です。それをトリガーできる必要があるだけです。
Windows Vista 以降、サービスがデスクトップと対話する機能を Windows がロックダウンしていることは理解していますが、サービスからファイルを開くコマンドをトリガーする方法が必要であると確信しています。私が開発したアプリは、CreateProcess を使用してコマンド ラインから pg_dump.exe (postgres データベースのバックアップ実行可能ファイル) を実行し、サービスとして実行しながらデータベース ファイルをバックアップすることができます。そのため、サービスからexeを起動してファイルを間接的に開くとうまくいくかもしれません。ただし、何らかの理由で、アプリケーションは pg_dump.exe を正常に実行しますが、作成した実行可能ファイルは実行しません。私が作成した exe がデスクトップ上に何らかの存在を期待しているのかどうか疑問に思っています。そのため、サービスはそれを開始したくありません。
これが私のCreateProcessコードです(私はこれのほとんどを書いていないので、私の無知を許してください):
サービスからexeを実行し、データベースバックアップファイルを作成するのに成功したpg_dump.exeを実行するための実装を次に示します。
問題のファイルを開こうとするセカンダリ exe を実行しようとする同様の実装を次に示します。
アプリがサービスとして実行されている場合、上記のコードは機能しません。pg_dump.exe は正常に実行されるのに、自分の GDNPOpener.exe は正常に実行されないのはなぜですか?
上で述べたように、ShellExecute と ShellExecuteEx を使用してサービスからファイルを直接開いてみましたが、うまくいきませんでした。(ファイルを開くために、セカンダリ exe (GDNPOpener.exe) 内で ShellExecuteEx を使用しています)
私のサービスが実行できるように私のexeを修正する方法を誰かが知っていれば、助けていただければ幸いです! サービスからファイルを開く別の方法を知っている人がいれば、それもありがたいです。
c++ - ShellExecuteEx() パラメータが機能しないのはなぜですか?
プログラム "C:\MyProgram.exe" を 2 つの変数であるパラメーターを使用して実行するとします。発生する問題は、MyProgram が 2 つのパラメーターしか受け取らないのに対し、私は明らかに 3 つのパラメーターを渡すことです。
私のコード:
ShellExecuteEx の変数パラメーターに関する情報はインターネット上にあまりないため、これに関する適切な説明を見つけることができませんでした。
この問題を解決する方法を知っている人はいますか?前もって感謝します!
c++ - ShellExecuteEx で開かれたウィンドウの終了メッセージをインターセプトする
閉じたときに彼の位置を保存しない迷惑なプログラムがあります。ウィンドウを開いてウィンドウを別の位置に移動する小さなコンソールプログラムを作成しました。プログラムを閉じたときに位置を保存したいのですが、ウィンドウが破壊される前に位置を保存できるように、終了メッセージを傍受するにはどうすればよいですか?
c++ - ShellExecuteEx で作成されたプロセスがウィンドウを所有しているかどうかを調べる方法は?
私はShellExecuteEx
外部アプリケーションを実行するために使用しています:
すべてが完全に機能しますが、メイン ウィンドウを閉じた後もプロセスがまだアクティブであるという、この外部アプリの予期しない動作が存在します。これによりWaitForSingleObject(shExInfo.hProcess, INFINITE);
、戻ることができなくなり、手動でプロセスを終了する必要があります。
WaitForSingleObject(shExInfo.hProcess, INFINITE);
代わりに、外部プロセスがウィンドウを所有しているかどうかをチェックし、そうでない場合はそれを終了するループに置き換える方法を探しています。
これは私が考えたものですが、より良い方法があれば指摘してください。
アップデート:
ロブソンの回答のおかげで、私は意図したことを何とかすることができました:
そして私のループ:
c++ - コマンド ライン コマンドを使用する場合、どのように戻りデータを取得できますか?
「ShellExecuteEx」を使用して、特に appcmd.exe を使用していくつかのコマンドを実行する C++ アプリケーションを継承しました。コマンドを実行して、コマンドラインから実行した場合と同じように、戻りデータを取得できるようにしたいと考えています。
必ずしも ShellExecuteEx を使用したいわけではありませんが、使用しない場合は、C++ プログラミングに慣れていないため、非常に単純なものを実行する必要があります。私のバックグラウンドは、C# および類似の言語です。
delphi - 昇格されていないプログラムは昇格されたアップデーターを開始し、アップデーターはプログラムの終了を待つ必要があります
Program.exe と updater.exe の 2 つのアプリがあり、どちらも Delphi5 で記述されています。プログラムは管理者権限なしで (およびマニフェストなしで) 実行されます。アップデーターには「requireAdministrator」のマニフェストがあります。
問題は、アップデーターを起動して、プログラムが閉じられるまで彼を待たせることです。ウェブでさまざまな方法を見つけましたが、どれも機能しません (ほとんどの場合、最初のアプリは 2 番目のアプリを開始し、2 番目のアプリの終了を待ちます。私の場合、2 番目のアプリは 1 番目のアプリの終了を待つ必要があります)。
アップデータは待つ必要があります。それは簡単
です updater.exe
方法 1
CreateProcess:
program.exeでアップデーターを起動する
何もせず、requireAdministrator を含むマニフェストがアップデーターにない場合にのみ機能します。Explizit 管理者権限でプログラムを実行すると、それも機能します。
方法 2 ShellExecuteEx:
program.exeでアップデーターを起動する
MyHandle は、この手順を実行するたびに (プログラムを再起動せずに) 異なる値を持つため、アップデーターはそれを操作できません。
そのため、updater.exe を起動して、program.exe のハンドルをファイルに書き込む方法がわかりません。
私はプログラミングのこれらの部分にあまり詳しくありません...誰かが私の問題についてアイデアを持っていますか?
python-2.7 - Python: 自動化スクリプトの一部のみを昇格モードで実行する
いくつかの自動化テストを実行していますが、一部の部分は昇格モードで実行する必要があります。どちらでも構いません。pywin32 ライブラリの shell.ShellExecuteEx を使用して独自のスクリプトを呼び出していますが、問題なく動作します。
これらは私が使用している正確なパラメータです:
これまでの私の方法は、自動化コード全体を 1 つのモジュールに入れ、昇格された特権でそのモジュールを呼び出すことでした。
ただし、一部のコードは昇格モードで実行されていない場合にのみ機能します。私は2つを切り替える必要があります。どうすればこれを達成できますか?
excel - Excel VBA で ShellExecuteEx がクラッシュする
Windows の更新が発生したため、次のように API 呼び出しがShellExecuteEx(sExecuteInfo)
クラッシュします。
0x75F7A529 (shell32.dll) で未処理の例外が発生しました アクセス違反の読み取り場所 0x68686903
ここで何が問題なのかわかりません。助けてもらえますか?
意味 :
コード:
c++ - ShellExecuteEx runas の lpParameters
ShellExecuteEx を使用してアプリケーションを起動する必要がある qt でアプリケーションに取り組んでいます。バッチ ファイルを実行していますが、2 つの引数を渡す必要があります。最初の引数は単なる文字ですが、2 番目の引数はスペースを含む場合と含まない場合があるパスです。私が何をしても、それはスペースを逃れません。エスケープされた引用符を含めると、実際には呼び出し全体が壊れているようです。問題はルナにあると思います。それがどのように機能するかは100%わかりませんが、呼び出しをコピーしてエスカレートされたシェルで実行しているようです。このプロセスは、追加された引用符で壊れているようです。
これが私のShellExecuteコードです。引数を 1 つ渡すように簡略化しましたが、それでも壊れます。
完全を期すために、ここに test.bat があります
私が得るシェル出力は次のとおりです。
スクリプトへのパスは
元のパスを台無しにするため、最初のコマンドが失敗することがわかります。
このような runas コマンドで引数に引用符を含める方法はありますか?