私は.Netでコンソールアプリケーションを開発しています。アプリケーションがcmd.exeまたはexplorer.exeから起動されたという情報に基づいて、動作を少し変更したいと思います。出来ますか?.Netアプリケーションを起動するプロセスを特定することはできますか?
8
A
答えて
9
Process this_process = Process.GetCurrentProcess();
int parent_pid = 0;
using (ManagementObject MgmtObj = new ManagementObject("win32_process.handle='" + this_process.Id.ToString() + "'"))
{
MgmtObj.Get();
parent_pid = Convert.ToInt32(MgmtObj["ParentProcessId"]);
}
string parent_process_name = Process.GetProcessById(parent_pid).ProcessName;
3
CreateToolhelp32Snapshot FunctionにはProcess32Firstメソッドがあり、PROCESSENTRY32 Structureを読み取ることができます。 - 識別子この プロセス(親プロセス)を作成したプロセスの
が th32ParentProcessID:構造は、あなたが欲しい情報を取得する特性を有しています。
この資料では、ToolHelpSnapshot機能の使用を開始するのに役立ちます:TOOLHELP /するManagementObjectと
3
一つの問題に近づく親プロセスが既に終了している可能性があることです。
GetStartupInfo Win32関数(.NETに相当するものがない場合はPInvokeを使用)は、ウィンドウのタイトルを含む構造体を塗りつぶします。 Win32コンソールアプリケーション "app.exe"の場合、このタイトル文字列は、エクスプローラ(またはVSデバッガ)から起動するとcmdから起動すると "app"、 "c:\ full \ path \から\ app.exe"になります。
もちろん、これはハックです(他のバージョンなどで変更される場合があります)。
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
int main()
{
STARTUPINFO si;
GetStartupInfo(&si);
MessageBox(NULL, si.lpTitle, NULL, MB_OK);
return 0;
}
関連する問題
- 1. springbootアプリケーションを再起動することはできますか?
- 2. プロセスを再起動せずにAzure WebロールでIISを再起動することはできますか?
- 3. Python NETでWindowsアプリケーションを起動する
- 4. LaunchDaemonから特定のユーザーとしてアプリケーションを起動する
- 5. 他のアプリケーションからpandoraを起動することはできますか?
- 6. 特定のDataAnnotationと特定の値を持つプロパティをループすることはできますか? .NETのC#
- 7. アプリケーション起動時にクラスパスjarを選択することはできますか?
- 8. Windowsプロセスの起動が黙って失敗した - 特定のシナリオでのBluetooth設定を起動することはできません
- 9. テストサーバーを起動せずにアプリケーションを起動することはできますか?
- 10. Pythonは特定のプロファイルでFirefoxを起動できますか?
- 11. 起動時にJupyterノートブックを起動することはできますか?
- 12. アプリケーションC#を起動して.NETを必要としないようにすることができます
- 13. 起動時にAIRアプリケーションを実行させることはできますか?
- 14. WindowsアプリケーションからLinuxプロセスを起動する方法は?
- 15. godaddyにSpring起動アプリケーションをインストールすることはできます
- 16. Windows Phone 7でアプリケーションが起動するときを知ることはできますか?
- 17. 設定済みのWebアプリケーションをTomcat 7にデプロイすることはできますが、起動しないようにすることはできますか?
- 18. は起動プロセスに作業ディレクトリを渡すことはできません
- 19. Hibernate JPAでSpring起動アプリケーションを起動するときにNoSuchMethodError
- 20. 特定のアプリケーションが起動されたことをどのように検出できますか?
- 21. CUDA、cuPrintfが「不特定の起動失敗」を引き起こしますか?
- 22. 特定のiOSシミュレータでMeteorアプリケーションを起動する方法
- 23. 春の起動時に特定の目標のリソースを除外することはできますか?
- 24. IntymijはGenymotion上でアプリケーションを実行できません(しかし起動することができます)
- 25. 特定のエラーコードをpylintすることはできますか?
- 26. 特定のリクエストをキャンセルすることはできますか?
- 27. 特定のアプリケーションをユーザーから隠すことはできますか?
- 28. Windows 8 Metro Style Appから子プロセスを起動することはできますか?
- 29. .NETアプリケーションでJITコンパイルをオフにすることはできますか?
- 30. 特定のリンクパターンを開くときにアプリを起動する
下記のAdam Mitzのコメントを確認してください。私はまだこの答えがシンプルさのために最高だと感じました。しかし誰かが気になるはずです。 –