我需要从插件DLL代码(VC ++)以管理员身份运行Chrome 但是如果Chrome窗口处于活动状态,则新创建的窗口不会获得管理员权限 我从JavaScript调用插件DLL代码。创建新窗口后,我关闭了上一个窗口,但同样的情况发生了 我需要帮助,因为我的插件需要admin 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;
}
答案 0 :(得分:2)
你无法以你想要的方式轻松解决这个问题。大多数浏览器可执行文件将检查现有实例并在找到时重用该实例。有一些浏览器特定的方法可以通过命令行选项调整或跳过该检查,以便允许您生成第二个进程,但它们是特定于浏览器的,甚至其中一些浏览器比其他浏览器更加困难。
例如,使用chrome.exe
调用--user-data-dir=c:\some\path
(作为管理员)将在第一次调用时创建一个新的(提升的)实例,并在后续时间重新使用它,前提是您提供相同的用户数据命令行上的dir(即使另一个(非提升的)chrome
一直在运行默认值。)所讨论的路径可以是它存在的任何提供的东西(如果它存在,你可以创建它为空目录)没有),它应该是你的,不与其他应用程序共享。这可能是暂时的。
同样,使用firefox.exe
调用-no-remote -profile c:\some\path
(作为管理员)将在调用时创建一个新的(提升的)实例,即使具有标准配置文件的实例已在运行,但后续调用必须使用不同的配置文件路径,否则Firefox(与Chrome不同)将以交互方式抱怨您实际上是在尝试从同一配置文件目录运行多个实例。
您可以从上面看到,可能,但很麻烦且容易出错以生成具有高程的新浏览器窗口,这引出了一个问题: 完全< / em>你需要在新浏览器中使用提升执行吗?整个浏览器是否真的需要以高程运行,或者你可以将“需要提升”功能委托给帮助程序进程(你可以很容易地生成“作为管理员“并通过环回或通过命名管道进行交谈,无论您的主机浏览器是什么?”