我开发了一系列 .NET 类库,我不希望它们从网站上运行。也就是说,用户只能通过 Windows 桌面应用程序使用/调用我的库。例如,我不希望用户能够在网站上的 ASP.NET Web 应用程序中使用这些库。有没有办法做到这一点?
4 回答
不会。即使您要阻止库在 IIS 下运行,仍然有人可以使用您的库运行桌面应用程序,并通过 IIS 与它进行通信。
HttpRuntime.AppDomainAppVirtualPath
您可以通过检查是否不存在null
并抛出异常来阻止您的代码在服务器端 ASP.Net AppDomain 中运行。
但是,这不会阻止某人在与 ASP.Net 不同的 AppDomain 中运行您的应用程序,当然也不会阻止某人将应用程序作为服务运行并使用 WCF 或命名管道将其公开给 ASP.Net。
你为什么要这样做?
编辑:要回答您的评论,这也是不可能做到完美的。您可以检查 HOST 标头,有人可以使用SimpleWorkerRequest
.
此外,任何事情都可以通过编辑程序集来解决。(没有完美的混淆器)
不,不是。
但是,根据您的应用程序是什么,您可能会削弱它的应用程序以供在线使用。如果您使用命名互斥锁,您可以确保在任何时候都只启动 1 个操作。与启动桌面应用程序的 1 个实例类似,您确保对 DoWork() 的所有调用都是连续的。
这意味着使用网络,他们无法重复拨打电话。但这确实取决于您如何设想它在桌面应用程序中的使用。
就像其他解决方案不是很安全一样,但是您可以使用Application.MessageLoop检查消息循环是否正在运行,这对于 WinForms 应用程序通常应该是正确的,但对于 Web 应用程序则不是。