2016-04-20 31 views
1

私はWebアプリケーションを持っています。 Delphiを使って作成したWindowsアプリケーションから起動します。私のコード内 最初クロムプロセスは、私は例えば、他のChromeのウィンドウ(ユーザーを開きたい場合は、私は、私のPC上で起動する最初のプロセスである場合、私はDelphiアプリケーションからChromeを開く際にエラーが発生しました

ShellExecEx(ChromePath, AppStartCmd, '', SW_SHOWMAXIMIZED) 

https://github.com/project-jedi/jcl/blob/master/jcl/source/windows/JclShell.pas

を使ってChromeを起動します私が最初にクロムページを開き、その後、私はlaunをしたい場合、私は、そうでなければ、このメッセージ

enter image description here

を持っている).. PCを起動するアプリを起動してから、彼はGoogleで何かを検索したいですchのwebappはうまく動作します。私はクロームが正常に動作します。このモードでは、同じパラメータで

"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --app=http://myapppath 

をアプリを起動したときに私のテストのために

私はクロームのデスクトップショートカットを作りました。 ProcessExplorerを使用して

は私が... enter image description here

+0

ShellExecuteの代わりにCreateProcessを使用する必要があります – RBA

+0

正確にChromeを実行する必要がありますか?それとも、デフォルトのシステムブラウザにすることができますか?デフォルトブラウザでは、 'ShellExecEx( 'http://site.url')'を実行し、パラメータを混乱させないためです。 URLはシステムによって処理され、HTTPリンクのデフォルトアプリケーションが実行されます。 – Andrew

+1

その匿名のプロセスではありません。より高い特権(管理者)のプロセスはRunAs 'ShellExecEx(ChromePath、AppStartCmd、 'runas'、SW_SHOWMAXIMIZED);を代わりに使用します。 'ShellExecuteElevated'について検索してください。 – RepeatUntil

答えて

1

クロームのインスタンスそのデスクトップshotcutによって起動するWebアプリケーションは、私はプロセスが匿名であるShellExecExことでアプリを起動し、認識プロセス enter image description here

を持っていることを見ているあなたプログラムが明らかに始まった特権を持っています。ユーザーが後でChromeを手動で実行すると、ウィンドウメッセージがより高い特権のウィンドウにフローできないため、昇格したコピーと通信できなくなります。クロムはそれを無反応であると解釈します。

プロセスはその親から特権レベルを継承します。つまり、プログラムが昇格した状態で実行されていることを意味します。あなたはそれをする必要はありませんので、私はあなたが停止することをお勧めします。

また、プログラムより低い権限でChromeプロセスを実行しようとすることもできます。 Raymond Chen blogged about that a few years agoとそれは自明ではないと説明した。彼は、デスクトップシェルのオートメーションオブジェクトを取得し、次にIShellDispatch2インターフェイスを取得し、最後にそのインターフェイスのShellExecuteメソッドを呼び出して、エクスプローラでプログラムを実行する代わりにプログラムを実行する方法を示します。これは、エクスプローラが昇格したユーザーではなく、現在のユーザーとして実行されているために機能します。実行するものは昇格されません。

関連する問題