c# - 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”,我该如何检查?
解决方案
ProgID 是指 COM-Server 的 ProgramID。通常在安装组件后在 Windows 注册表中注册。这是一种间接创建 COM 类实例的代码。
它是一种古老的技术,在 90 年代和 2000 年初被大量使用。ActiveX 组件基于 COM 技术。
终端服务器上似乎没有安装带有 ProgID“xxx.application”的 COM-Server。或者没有正确注册。或者您的代码没有足够的权限来读取相关的注册表项等......
推荐阅读
- c# - 如果 JSON 数据缺少对象中的字段,则 JSON 反序列化失败
- c - 头文件中的数组声明
- pandas - 如何找到 3 组与 pandas 的交集?
- amazon-web-services - S3 对象创建事件已删除
- docker - 在 Docker Traefik API 上获取请求 - 由 CORS 规则阻止
- typescript - 具有索引类型的 TypeScript 通用柯里化函数
- python - Python - 根据另一个单元格条件选择行单元格
- javascript - 在多级对象数组上使用过滤器?
- database - Microsoft Access:如何在连续表单上添加一个按钮,该按钮将更新与该按钮在同一行中的特定字段的值?
- python - 替换数据框中的某个值