如何限制 .Net 程序集在特定机器上运行

Posted

技术标签:

【中文标题】如何限制 .Net 程序集在特定机器上运行【英文标题】:How to restrict .Net Assembly to Run on Particular Machines 【发布时间】:2009-05-16 00:10:50 【问题描述】:

我们有一个服务器应用程序,我们希望限制非用户从其他机器触发它,甚至通过双击任何共享来触发它。

但是,开发人员应该很容易在他们的盒子上运行它。

执行此政策的各种方法是什么?

【问题讨论】:

【参考方案1】:

一个想法:可以使用需要存在才能运行的注册表项。

另一个:可能需要在密钥库中安装 X509 证书才能运行

另一个:使用 System.Security.Permissions 并将操作限制为一组用户或一个组。

等等

【讨论】:

【参考方案2】:

有几种方法可以控制程序集的访问。

我们基于许可保护我们的程序集,因此只有拥有许可的工作站才能运行程序集。

我们允许开发人员在未选中的情况下运行调试版本。我们当然会严格控制调试版本。如有必要,您可以在调试版本中进行额外检查以提高安全性。或者向开发者颁发许可证。

对于我们的调试版本,我们在包含在“#IF DEBUG”中的调试代码中添加了一个许可证,以确保它不会被编译到发布版本中。

我并不是说这是最好的方法,但这是我们使用的方法。

【讨论】:

我喜欢#IF DEBUG 路由,这就是我所做的。此外,如果 OP 还没有正式的构建过程,这可能是他们实施的正确动机。【参考方案3】:

我想你正在寻找一个简单的故障保护,而不是一个气密的访问控制......

将机器名称放入配置文件中,并在应用程序启动时将其与机器名称进行比较。这样您就不会在其他任何地方错误地运行它,并且在开发或移动应用程序时很容易更改。

【讨论】:

以上是关于如何限制 .Net 程序集在特定机器上运行的主要内容,如果未能解决你的问题,请参考以下文章

使用 PowerShell 脚本中的 WinSCP .NET 程序集在 Linux 服务器上运行 bash 脚本

确定特定 .NET 程序集分配的内存量

为啥使用任务集在一组独立的内核上运行多线程 Linux 程序会导致所有线程在一个内核上运行?

如何使用数据集在 C# 或 dotnet 中查找主键列名称?

如何注册COM对象及其相关的Interop程序集?

如何使用机器学习从给定的地理数据集在 python 中进行预测?