gpt4 book ai didi

c# - 获取提升的excel进程

转载 作者:太空宇宙 更新时间:2023-11-03 15:56:46 25 4
gpt4 key购买 nike

几天前,我不得不使用 ProcessStartInfo 以当前用户权限运行 Excel,以便使用一些需要管理员或当前用户权限的插件。

 new Process{
StartInfo = new ProcessStartInfo{
Verb = "runas",
FileName = @"path/to/app.exe",
Arguments = "-officeexcel",
Domain = domain,
UserName = login,
Password = pa ss,
UseShellExecute = false,
}
}.Start();

因此,我不能再使用了:

Marshal.GetActiveObject("Excel.Application")

获取excel实例。所以我尝试使用 AccessibleObjectFromWindow() 的后期绑定(bind):

int hwnd = (int)FindWindow("XLMAIN", null);

if (hwnd != 0)
{
int hwndChild = 0;
EnumChildCallback cb = new EnumChildCallback(EnumChildProc);
EnumChildWindows(hwnd, cb, ref hwndChild);

if (hwndChild != 0)
{
const uint OBJID_NATIVEOM = 0xFFFFFFF0;
Guid IID_IDispatch = new Guid("{00020400-0000-0000-C000-000000000046}");
ExcelWindow ptr;

int hr = AccessibleObjectFromWindow(hwndChild, OBJID_NATIVEOM, IID_IDispatch.ToByteArray(), out ptr);

if (hr >= 0)
{
using (UILanguageHelper fix = new UILanguageHelper())
{
return (Excel.Application)ptr.GetType().InvokeMember("Application", BindingFlags.GetProperty, null, ptr, null);
}
}
}
}

return null;

它有效,但我得到的 Excel 应用程序具有零属性,我无法调用任何方法!在获得提升的 Excel 实例后,我需要运行一些宏!

我做错了什么?

最佳答案

出于安全原因,您不能与从非提升模式以提升模式启动的应用程序交互。

在你的情况下,我认为实现你所要求的唯一方法是首先提升你的应用程序(或另一个专用于此任务的小应用程序),然后,你提升的应用程序将依次运行 excel 并执行你需要的任务。 Excel 将以提升模式运行。

这种设计模式是以所需的最低权限运行您的应用程序。然后提升,在命令行中指定一个“ token ”(任何你可以用来通过 IPC/套接字连接到你的应用程序的东西)。

关于c# - 获取提升的excel进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23249484/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com