2

プラグイン dll コード (VC++) から Chrome を管理者として実行する必要があります。
しかし、クロム ウィンドウがアクティブな場合、新しく作成されたウィンドウは管理者権限を取得しませんでした。
JavaScript からプラグイン dll コードを呼び出しています。新しいウィンドウを作成した後、前のウィンドウを閉じましたが、同じことが起こります。
私のプラグインには管理者権限が必要なため、ヘルプが必要です。Firefox の場合も同様です。
(今、管理者として新しいウィンドウを作成するために shellExecute を使用しています)。

コードスニペット:

ここで、Firefox のインスタンスを作成します (すべてのブラウザーで同様のものが必要です)。

StartNewInstance(BSTR Address)  
{  
    // TODO: Add your implementation code here  
    MessageBox(0,L"Inside",L"ParentName",0);  
    TCHAR szEXEPath[2048];  
    GetModuleFileName ( NULL, szEXEPath, 2048 );  
    SHELLEXECUTEINFO Shex;  
    ZeroMemory( &Shex, sizeof( SHELLEXECUTEINFO ) );  
    Shex.cbSize = sizeof( SHELLEXECUTEINFO );  
    Shex.fMask = SEE_MASK_FLAG_NO_UI | SEE_MASK_NOCLOSEPROCESS;  
    Shex.lpVerb = L"runas";  
    Shex.lpFile = L"C:\\Program Files\\Mozilla Firefox\\firefox.exe";  
    Shex.nShow = SW_SHOWNORMAL;  
    Shex.lpParameters = Address;  
    ShellExecuteEx( &Shex );  
    return true;  
}
4

1 に答える 1

2

あなたがしようとしている方法でこれを簡単に解決することはできません。ほとんどのブラウザー実行可能ファイルは、既存のインスタンスをチェックし、見つかった場合はそのインスタンスを再利用します。2 番目のプロセスを生成できるようにするために、コマンドライン オプションを使用してそのチェックを微調整またはスキップするブラウザー固有の方法がありますが、それらはブラウザー固有であり、それらのブラウザーの一部でさえ他のブラウザーよりもスタックしています。

たとえば、chrome.exe(管理者として)を呼び出す--user-data-dir=c:\some\pathと、最初に呼び出されたときに新しい(昇格された)インスタンスが作成され、コマンドラインで同じユーザーデータディレクトリを指定した場合(別の(昇格されていない場合でも) )chromeは常にデフォルトで実行されています。) 問題のパスは、存在する限り任意のパスにすることができ (存在しない場合は空のディレクトリとして作成できます)、他のアプリケーションと共有するのではなく、自分のものにする必要があります。一時的な場合があります。

同様に、firefox.exe(管理者として) を呼び出す-no-remote -profile c:\some\pathと、標準プロファイルを持つインスタンスが既に実行されている場合でも、呼び出されたときに新しい (昇格された) インスタンスが作成されますが、その後の呼び出しでは別のプロファイル パスを使用する必要があります。基本的に、同じプロファイル ディレクトリから複数のインスタンスを実行しようとしています。

上記からわかるように、昇格を使用して新しいブラウザー ウィンドウを生成することは可能ですが、面倒でエラーが発生しやすいため、疑問が生じます:その新しいブラウザーで昇格を使用して実行する必要があるのは正確には何ですか? ブラウザ全体が本当に昇格で実行する必要がありますか、それとも「昇格が必要」機能をヘルパープロセスに委任できますか(ホストに関係なく、「管理者として」ループバックまたは名前付きパイプを介して簡単に生成して通信できます)ブラウザは?)

于 2012-11-11T05:48:34.083 に答える