首页 > 解决方案 > Type.GetTypeFromProgID(string) 在其他机器上不起作用

问题描述

private bool StartSkript(string Systemskript)
{
    Type typeFromProgID = Type.GetTypeFromProgID("xxx.application"); // this line works on windows 10 and doesnt work on windows server 2019.
    if (typeFromProgID == null)
    {
        return false;
    }
    try
    {
        dynamic applicationInstance = Activator.CreateInstance(typeFromProgID);
        applicationInstance.RunFormSkript(Systemskript, 0);
        return true;
    }
    catch (Exception)
    {
        return false;
    }
}

你好,

我们试图在正在运行的进程中调用一个函数。上面的代码在开发机器上找到 xxx.application 没有问题,但在终端服务器测试环境中它返回 null。

应用程序 xxx 与 c# 程序在同一用户下运行。

我们的第一个问题是,我们真的不明白为什么要搜索 xxx.application(似乎是一个类)而不是 xxx.exe,后者将是进程名称。

接下来,我们不知道如何处理这个问题。如果我什至在寻找正确的调用“xxx.application”,我该如何检查?

标签: c#

解决方案


ProgID 是指 COM-Server 的 ProgramID。通常在安装组件后在 Windows 注册表中注册。这是一种间接创建 COM 类实例的代码。

它是一种古老的技术,在 90 年代和 2000 年初被大量使用。ActiveX 组件基于 COM 技术。

终端服务器上似乎没有安装带有 ProgID“xxx.application”的 COM-Server。或者没有正确注册。或者您的代码没有足够的权限来读取相关的注册表项等......


推荐阅读