当我指定机器名时,无法在自己的机器上查询SystemIndex

2024-03-05

我正在尝试编写一个简单的程序来连接到远程计算机并查询索引状态。

这是在我的机器上执行此操作的代码。这工作正常。

using System;
using Microsoft.Search.Interop;

namespace IndexStatus
{
    class Program
    {
        static void Main(string[] args)
        {
            CSearchManager manager = new CSearchManager();
            CSearchCatalogManager catalogManager = manager.GetCatalog("SystemIndex");
            _CatalogPausedReason pReason;
            _CatalogStatus pStatus;
            Console.WriteLine(catalogManager.NumberOfItems().ToString());
            int plIncrementalCount;
            int plNotificationQueue;
            int plHighPriorityQueue;
            catalogManager.NumberOfItemsToIndex(out plIncrementalCount, out plNotificationQueue, out plHighPriorityQueue);
            Console.WriteLine(plIncrementalCount.ToString());
            Console.WriteLine(plNotificationQueue.ToString());
            Console.WriteLine(plHighPriorityQueue.ToString());
            catalogManager.GetCatalogStatus(out pStatus, out pReason);
            Console.WriteLine(pStatus.ToString() + " " + pReason.ToString());
            Console.ReadLine();
        }
    }
}

然而,当我打电话时GetCatalog on "mycomputername.SystemIndex"代替"SystemIndex", I get

类型为“System.Runtime.InteropServices.COMException”的未处理异常发生在 索引状态.exe

附加信息:HRESULT 异常:0x80042103

Visual Studio 2015 在 Windows 8.1 上以管理员权限运行。目标计算机主要是Windows 7系统,程序主要在Windows 10系统上运行。我正在使用从 Microsoft Windows Search 3.X SDK 下载的 Microsoft.Search.Interop.dllhere https://www.microsoft.com/en-us/download/details.aspx?id=7388。我关闭了防火墙以防万一与此有关,但显然不是。

我已经检查过,如果我完全无意义地调用该函数,我会得到相同的异常,例如"sdfd"。我发现this http://joshpoley.blogspot.com/2011/09/hresults-user-0x004.html:

MSS_E_CATALOGNOTFOUND - 0x80042103 - (8451) WindowsSearchErrors.h

The specified catalog was not found. Check to see if it was deleted, or if there are errors in your application code.

我尝试使用“localhost”而不是计算机名称,但这没有帮助。

The MSDN 文档 https://msdn.microsoft.com/en-us/library/windows/desktop/bb231475(v=vs.85).aspx说这个:

目前 Microsoft Windows Desktop Search (WDS) 3.0 仅支持一种 目录,它被命名为 SystemIndex。

我不知道如何理解这一点。也许该方法无法在不同的机器之间进行选择?如果是这样,除了使用 PsExec 之类的东西之外,还有其他方法可以连接到远程目录并进行这些查询吗?

Re Ben N 的回答:这对我来说开始变得很深,但我更着迷而不是害怕。 :) 经过几次修改后,您的代码对我有用:

CSearchManagerClass manager = System.Runtime.InteropServices.Marshal.CreateWrapperOfType(comManager, typeof(CSearchManagerClass));无法在 Visual Studio 2015 上编译,并会出现以下错误:

第二个错误很容易通过添加强制转换来修复:

CSearchManagerClass manager = (CSearchManagerClass)System.Runtime.InteropServices.Marshal.CreateWrapperOfType(comManager, typeof(CSearchManagerClass));

至于“互操作类型无法嵌入”错误消息,我发现这个问题 https://stackoverflow.com/questions/2483659/interop-type-cannot-be-embedded。有两种建议的解决方案:

  • 改变Embed Interop TypesMicrosoft.Search.Interop 引用的属性False.

  • Change CSearchManagerClass to CSearchManager.

第一种方案可以使程序编译通过,但影响可移植性。现在该程序将无法在没有 .dll 的计算机上运行。第二个解决方案编译但抛出

类型为“System.ArgumentException”的未处理异常发生于 mscorlib.dll

附加信息:类型必须是 __ComObject 或派生的 来自 __ComObject。

当我在自己的机器上运行它时,就在这条线上。

但还有一个问题,这个我不知道。当我在同事的机器上运行它时(我是他计算机上的管理员,Visual Studio 正在以管理员权限运行),我得到

“System.UnauthorizedAccessException”类型的未处理异常 发生在 mscorlib.dll 中

附加信息:检索远程的 COM 类工厂 具有 CLSID {7D096C5F-AC08-4F1F-BEB7-5C22C517CE39} 的组件 由于以下错误,计算机计算机名失败:80070005 计算机名。

This does scare me a little bit because I know next to nothing about COM. I've checked that DCOM is enabled on his computer and on mine. But when I try to go to his computer in Component Services it shows as a enter image description here and DCOM Config is missing from the tree. And the same happens for other computers on the domain (even though I have admin rights on all workstations). This blog https://hurcane.wordpress.com/2008/06/11/remote-administration-of-com-through-a-firewall/ suggests it could be a firewall issue and if it is, it's not something that will be feasible to overcome.

您的两个答案都绝对值得赏金,但如果您有任何建议或能够阐明正在发生的事情,我将非常感激。如果我不能让它发挥作用,那也没关系,但我绝对想从中获取尽可能多的知识。


GetCatalog不支持访问远程计算机,但我们可以使用 COM 创建一个引用目标计算机上的服务的搜索管理器对象。

// Assume targetMachine has the name of the target computer
Guid guid = new Guid("{7D096C5F-AC08-4F1F-BEB7-5C22C517CE39}");
Type managerType = Type.GetTypeFromCLSID(guid, targetMachine, true);
var comManager = Activator.CreateInstance(managerType);
CSearchManagerClass manager = (CSearchManagerClass)System.Runtime.InteropServices.Marshal.CreateWrapperOfType(comManager, typeof(CSearchManagerClass));

然后你应该能够使用manager就好像它是本地机器的管理员一样。如果联系远程计算机时出现问题,COMException将被扔在CreateInstance call.

有关其 PowerShell 版本,请参阅我对您的超级用户问题的回答 https://superuser.com/a/1097806/380318.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当我指定机器名时,无法在自己的机器上查询SystemIndex 的相关文章

  • 为什么存在 async 关键字

    浏览 msdn 9 频道视频时 我发现以下未答复的评论 希望有人能解释一下 我不明白 async 关键字的意义 为什么不直接允许 任何时候方法返回任务时都会使用await关键字 就像迭代器一样 可以在任何返回 IEnumerable 的方法
  • System.IO.IOException:由于意外>数据包格式,握手失败?

    有谁知道这意味着什么 System Net WebException 底层连接已关闭 发送时发生意外错误 gt System IO IOException 由于意外 握手失败 数据包格式 在 System Net Security SslS
  • SSL/TLS/HTTPS 站点在 C#/.NET WebBrowser 控件中非常慢,但在 Internet Explorer 中则很好

    背景 我正在修改自动维基浏览器 http en wikipedia org wiki Wikipedia AutoWikiBrowser使用托管在安全服务器上的 MediaWiki 站点 我允许用户通过 C 应用程序中的 WebBrowse
  • 在 C# Winforms 应用程序中嵌入 Windows XP 主题

    我有一个旧版 C Windows 窗体应用程序 其布局是根据 Windows XP 默认主题设计的 由于需要将其作为 Citrix 应用程序进行分发 该应用程序现在看起来像经典主题应用程序 因为 Citrix 不鼓励使用主题系统服务 所以
  • 劫持系统调用

    我正在编写一个内核模块 我需要劫持 包装一些系统调用 我正在暴力破解 sys call table 地址 并使用 cr0 来禁用 启用页面保护 到目前为止一切顺利 一旦完成 我将公开整个代码 因此如果有人愿意 我可以更新这个问题 无论如何
  • 对 boost 库的依赖项没有完整路径

    我已经成功构建了动态库 依赖于使用自定义前缀构建和安装的 boost 库 b2 install prefix PREFIX 然而 当我跑步时otool L在我的库中 我得到如下输出 libboost regex dylib compatib
  • 从成员函数指针类型生成函子

    我正在尝试简化 通过make fn 预处理参数的函子的生成 通过wrap 对于 arity 的成员函数n 生成函子基本上可以工作 但到目前为止只能通过显式指定成员函数的参数类型来实现 现在我想从它处理的成员函数类型生成正确的函子 struc
  • OpenCV 2.4.3 中的阴影去除

    我正在使用 OpenCV 2 4 3 最新版本 使用内置的视频流检测前景GMG http docs opencv org modules gpu doc video html highlight gmg gpu 3a 3aGMG GPU算法
  • 使用 WF 的多线程应用程序的错误处理模式?

    我正在写一个又长又详细的问题 但只是放弃了它 转而选择一个更简单的问题 但我在这里找不到答案 应用程序简要说明 我有一个 WPF 应用程序 它生成多个线程 每个线程执行自己的 WF 处理线程和 WF 中的错误 允许用户从 GUI 端进行交互
  • 默认析构函数做了多少事情

    C 类中的默认析构函数是否会自动删除代码中未显式分配的成员 例如 class C public C int arr 100 int main void C myC new C delete myC return 0 删除 myC 会自动释放
  • asp.net网格分页的SQL查询

    我在用iBatis and SQLServer 使用偏移量和限制进行分页查询的最佳方法是什么 也许我添加该列ROW NUMBER OVER ORDER BY Id AS RowNum 但这只会阻止简单查询的数据访问 在某些情况下 我使用选择
  • ASP.NET JQuery AJAX POST 返回数据,但在 401 响应内

    我的应用程序中有一个网页 需要调用我设置的 Web 服务来返回对象列表 这个调用是这样设置的 document ready function var response ajax type POST contentType applicati
  • 0-1背包算法

    以下 0 1 背包问题是否可解 浮动 正值和 浮动 权重 可以是正数或负数 背包的 浮动 容量 gt 0 我平均有 这是一个相对简单的二进制程序 我建议用蛮力进行修剪 如果任何时候你超过了允许的重量 你不需要尝试其他物品的组合 你可以丢弃整
  • 使用 iTextSharp 5.3.3 和 USB 令牌签署 PDF

    我是 iTextSharp 和 StackOverFlow 的新手 我正在尝试使用外部 USB 令牌在 C 中签署 PDF 我尝试使用从互联网上挖掘的以下代码 Org BouncyCastle X509 X509CertificatePar
  • C 中带有指针的结构的内存开销[重复]

    这个问题在这里已经有答案了 我意识到当我的结构包含指针时 它们会产生内存开销 这里有一个例子 typedef struct int num1 int num2 myStruct1 typedef struct int p int num2
  • 为什么 Linux 对目录使用 getdents() 而不是 read()?

    我浏览 K R C 时注意到 为了读取目录中的条目 他们使用了 while read dp gt fd char dirbuf sizeof dirbuf sizeof dirbuf code Where dirbuf是系统特定的目录结构
  • 为什么文件更新时“如果较新则复制”不复制文件?

    我在 Visual Studio Express 中有一个解决方案 如下所示 The LogicSchemaC 中的类 将在运行时解析指定的 XML 文件 以下是在main的方法Program cs LogicSchema ls new L
  • 在 Xamarin 中获取 OutOfMemoryException

    java lang OutOfMemoryError 考虑增加 JavaMaximumHeapSize Java 执行时内存不足 java exe 我的 Visualstudio Xamarin 项目出现内存不足异常 请帮助我如何解决此问题
  • 以 UTF8 而不是 UTF16 输出 DataTable XML

    我有一个 DataTable 我正在使用 WriteXML 创建一个 XML 文件 尽管我在以 UTF 16 编码导出它时遇到问题 并且似乎没有明显的方法来更改它 我了解 NET 在字符串内部使用 UTF 16 这是正确的吗 然后 我通过
  • 如何使用 C# 以低分辨率形式提供高分辨率图像

    尝试使用 300dpi tif 图像在网络上显示 目前 当用户上传图像时 我正在动态创建缩略图 如果创建的页面引用宽度为 500x500px 的高分辨率图像 我可以使用相同的功能即时转换为 gif jpg 吗 将创建的 jpg 的即将分辨率

随机推荐

  • 在 C# 中杀死除我的程序之外的所有进程

    不 这不是恶意软件 我正在尝试制作一个 PC 辅助工具来杀死所有非 Windows 进程的任务 但在此过程中 它会杀死自己 这是一个控制台应用程序 所以我尝试删除 cmd exe 来终止 但它仍然终止了我的程序 有类似这样的方法吗 if p
  • Scrapy 在爬行几页后停止爬行

    我刚刚学习了 Scrapy 和网站爬虫的基础知识 所以我非常感谢您的意见 我在教程的指导下 从 Scrapy 构建了一个简单明了的爬虫 它工作正常 但不会按应有的方式抓取所有页面 我的蜘蛛代码是 from scrapy spider imp
  • 在 C# 中声明固定大小数组的列表

    我有一个对像素进行操作的函数 我想创建一个包含 RGB 值的列表 但是当我这样声明时 List
  • 可靠地将包含 PHP 数组信息的字符串转换为数组 [重复]

    这个问题在这里已经有答案了 可能的重复 模拟 php 数组语言构造或使用正则表达式解析 https stackoverflow com questions 3267951 simulate php array language constr
  • BDE dbidorestruct 返回空表

    在我的 Delphi Sydney Win 10 应用程序中 我使用 BDE 即使在今天也是如此 当我更改 更改 删除字段时 我想修改其现有的 悖论 表 我发现了一个免费软件组件 TFieldUpdate v1 1 由 Nathanial
  • 你会推动每一个提交吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我希望有人能给我更多有关使用 git 和远程存储库的详细信息 我还没有使用过远程存储库 您向本地存储库提交较小的更改 这些更改可能不会太令人震惊
  • CMD 行判断文件/路径是本地还是远程?

    从 NT shell 脚本中 我需要能够判断目标路径是否位于本地驱动器上 例如C or D 或在远程 映射驱动器上 或者 UNC path或映射的驱动器盘符 例如Z 有什么建议么 echo off goto main isremote se
  • 如何更改 Android 的日期选择器样式

    我目前正在制作一份注册表 其中一个字段是用户的出生日期 我想使用日期选择器 但我不想要如下所示的日历布局 我希望布局看起来像这样 这样就可以更轻松地选择年份和月份 而无需滚动浏览所有内容 但是我不知道如何解决这个问题 也不知道在 style
  • 哪个是保持逻辑角度的最佳位置?

    我正在开发一个角度应用程序 假设当我们实现某个按钮的 onclick 等功能时 调用 api 处理数据 在表中显示结果 表数据应该跨页面保留 因此我们需要保持变量处于服务状态 为了实现 首先我们可以开始从模板调用函数 然后在组件中我们可以做
  • 在 WPF 中不断绘制大量位图的最佳方法?

    我被这个非常简单的问题难住了 我正在制作一个基于图块的游戏引擎 需要能够允许用户使用 WPF 用户界面编辑地图 天真地 我以为我可以简单地使用 Graphics FromImage 不断更新一个好的老式 缓冲 System Drawing
  • 如何在 pypi 上为新项目创建 API 令牌?

    我正在尝试使用 API 令牌将包上传到 PyPI 我想使用项目特定的 API 令牌而不是帐户特定的令牌 因为这看起来更安全 但是 由于尚未在 PyPI 上创建该项目 因此当我尝试在 PyPI 网站上创建新的 API 令牌时 没有可供选择的项
  • 如何使用 KeyEvent 定位正在运行的应用程序?

    我的目标是通过键事件来定位在后台服务的前台或后台运行的特定应用程序 我尝试了很多解决方案 但还没有成功 尝试的几个解决方案 全部来自后台运行的服务 通过广播 我尝试定位第一个管理关键事件的应用程序 例如电话应用程序 KeyEvent lKe
  • JAXB - 具有多个名称和类型的 XmlElement

    我有以下类层次结构 XmlRootElement public abstract class Animal XmlRootElement public class Dog extends Animal XmlRootElement publ
  • 函数内部与外部循环的速度差异

    Out of 这个帖子 https stackoverflow com questions 53971364 split a vector and summing values 53971606 53971606在对各种解决方案进行基准测试
  • 在 SQL Server 2012 上运行 DTS 包

    我读到 SQL Server 2012 不支持 DTS 包 我知道有一个向后兼容性包 选项 我们用于 SQL Server 2008R2 来运行 DTS 包 该向后兼容包不适用于 SQL Server 2012 吗 2008 R2http
  • JQuery 动画在 Internet Explorer 中不起作用

    我在使这个 JQuery 在 Internet Explorer 中工作时遇到了一些麻烦 它在 FF WebKit 等中工作得很好 向上滑动 弹起并落回原位 但在 Internet Explorer 中它什么也不做 按钮不起作用并且内容在页
  • didCreatePaymentResult stripeID 是一个card_ token,似乎无法保存给客户

    我有一个 swift iOS 应用程序 它要求用户提供应用程序中付款和未来付款的付款详细信息 它使用带有 Apple Pay 的 stripe SDK 并且似乎都已正确设置 我有以下方法 func paymentContext paymen
  • 检查类常量是否存在

    如何检查 PHP 类中是否定义了常量 class Foo const BAR 1 有没有类似的东西property exists or method exists 对于类常量 或者我可以使用defined Foo BAR 您可以使用以下代码
  • 根据 GPS 坐标将 Google 地图嵌入 HTML 页面

    我有一个 PHP 照片库 可以从图像中读取 GPS 坐标 我想修改它以使用坐标并在照片页面上包含谷歌地图 有没有一种简单的方法可以通过仅提供这对信息来在 HTML 页面上显示谷歌地图 Thanks 以下是一些可以帮助您入门的示例 使用谷歌地
  • 当我指定机器名时,无法在自己的机器上查询SystemIndex

    我正在尝试编写一个简单的程序来连接到远程计算机并查询索引状态 这是在我的机器上执行此操作的代码 这工作正常 using System using Microsoft Search Interop namespace IndexStatus