我需要从插件动态链接库代码(VC++)管理员运行Chrome。
但如果chrome窗口处于活动状态,则新创建的窗口不会获得管理员权限。
我从JavaScript调用插件动态链接库代码。在创建新窗口后,我关闭了以前的窗口,但同样的情况也发生了。
我需要帮助,因为我的插件需要管理privileges.same在火狐的情况下。
(现在我以管理员身份使用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;
}发布于 2012-11-11 13:48:34
你不能用你正在尝试的方式轻松地解决这个问题。大多数浏览器可执行文件将检查现有实例,并在找到时重用该实例。有一些特定于浏览器的方法可以通过命令行选项调整或跳过检查,以便允许您生成第二个进程,但这些方法是特定于浏览器的,甚至其中一些浏览器也比其他浏览器更自负。
例如,使用--user-data-dir=c:\some\path调用chrome.exe (以管理员身份)将在第一次调用时创建一个新的(提升的)实例,并在以后的调用中重用它,前提是您在命令行上提供了相同的用户数据目录(即使此时另一个(非提升的) chrome一直在默认情况下运行)。有问题的路径可以是任何东西,只要它存在(如果它不存在,您可以将其创建为空目录),并且它应该是您的,而不是与其他应用程序共享。这可能是暂时的。
类似地,使用-no-remote -profile c:\some\path调用firefox.exe (以管理员身份)将在调用时创建一个新的(提升的)实例,即使具有标准配置文件的实例已经在运行,尽管后续调用必须使用不同的配置文件路径,否则Firefox (与Chrome不同)将交互地抱怨您实际上试图运行同一配置文件目录中的多个实例。
从上面可以看出,生成一个带有elevation的新浏览器窗口是可能的,但很麻烦且容易出错,这就引出了这样一个问题:在那个新浏览器中执行elevation时到底需要什么?整个浏览器是否真的需要使用elevation运行,或者您是否可以将“需要elevation”功能委托给一个助手进程(这样您就可以轻松地生成“以管理员身份”并通过环回或通过命名管道与之通信,而不管您的主机浏览器是什么?)
https://stackoverflow.com/questions/13231265
复制相似问题