防止在C#中启动应用程序

时间:2009-11-17 20:55:54

标签: c# monitoring

好的,我已经花了一个下午的研究,并没有太多运气找到答案。我试图阻止应用程序通过某种DLL或后台应用程序启动。它用于监控我所在机构的应用程序使用和许可证。我在这里找到了关于WqlEventQuery和FileSystemWatcher的线索。这些解决方案似乎都不适合我,因为:

使用WqlEventQuery,我只能在创建进程后处理事件。使用记事本作为测试,记事本在我的逻辑关闭之前可见并且可以访问。我试图暂停/恢复线程(我知道这是不安全的,但我正在测试/播放)但这只是挂起窗口直到我的逻辑完成。

使用FileSystemWatcher,我无法通过启动.exe获取任何事件,只能创建,重命名和删除文件。

这里的目标是不让应用程序启动,除非我的逻辑允许它启动。这可能吗?我提出的下一个最佳解决方案是强制某种类型的模态对话框,它不允许用户与任何东西进行交互,一旦对话框关闭,应用程序就会被杀死。我关心的是很好地杀死应用程序并在加载诸如Photoshop之类的东西时处理高开销的应用程序。这也会干扰我希望具有用户可以进入队列的功能,直到许可证可用为止。这是我最好的路线吗?还有其他建议吗?

由于

编辑:澄清这不是病毒或任何恶意的东西。这不是要阻止访问黑名单或允许通过白名单访问。我们的想法是针对某些应用程序逐个检查数据库,并查看是否有可用的许可证。如果有,请让应用程序启动,如果没有显示允许用户知道的对话框。如果我们有足够的许可证来满足需求,我们也会使用它进行监控和跟踪等。其中一个应用程序的一个例子是SPSS,它拥有非常昂贵的许可证,但使用它的人数非常有限。

10 个答案:

答案 0 :(得分:1)

你能用

吗?

System.Diagnostics.Process.GetProcessesByName

在循环中寻找过程?

如果您不使用过于激进的轮询率,它可能会有效。

答案 1 :(得分:1)

您实际上可以编辑注册表,这样当您单击psd时,您的启动器将被调用而不是photoshop。然后你的启动器会检查许可证,如果有人启动了带有文件路径的photoshop。

答案 2 :(得分:1)

您确实很接近,请查看WMI管理事件。 http://msdn.microsoft.com/en-us/library/ms186151%28VS.80%29.aspx

Microsoft的示例代码:http://msdn.microsoft.com/en-us/library/ms257355(VS.80).aspx

订阅相应的活动将为您的应用程序提供适当的信息,以执行您所描述的内容。

答案 3 :(得分:0)

不确定这是否是一个好的解决方案,但你可以做一些事情,比如将密钥传递给main,这样如果密钥不存在或有效,应用程序就会关闭。然后,当您在代码中打开应用程序时,只需将密钥传入。然后,有人必须知道密钥才能启动应用程序。

这假设您可以访问有问题的应用程序的源代码,在再次阅读您的问题时,我不太确定。

答案 4 :(得分:0)

我假设您没有要阻止加载的应用程序的来源...

您是否考虑过使用系统政策?这将是阻止用户启动程序的最佳支持方式。

你可以运行一个服务强制杀死任何没有“列入白名单”的应用程序,但我不能说这有多好用。

答案 5 :(得分:0)

我想知道你是否采取了错误的做法。回到当天,有一个Mac应用程序会阻止访问桌面,并有按钮来启动一组应用程序。

<强> IDEA

如果你有一个批准的应用程序的包装器然后只允许你的包装器在计算机上运行怎么办?

答案 6 :(得分:0)

我希望有一些方法可以挂钩应用程序,但在这方面无法直接帮助。

您可以通过检测应用程序的窗口打开并隐藏它(将其移到屏幕外)来改进当前的方法,以便在您尝试关闭它时用户无法尝试与其进行交互。

然而,另一种可能的方法(取决于您的具体情况)是编写应用程序启动器。这只是替换检查许可条件的应用程序的快捷方式,然后执行Process.Start以启动真正的.exe。这适用于任何应用程序。 (我使用这样的系统来启动具有专门环境设置的应用程序并且它工作得很漂亮)

您可以将此与当前的方法结合起来,作为设法绕过发射器的“聪明”用户的后备。

答案 7 :(得分:0)

如果我的理解是正确的,你想要创建一个应用程序,这将阻止计算机用户启动除白名单之外的任何其他进程。

如果是这种情况,请使用System.Diagnostics.Process监视进程的进程列表(在while循环中)(GetProcesses方法提供所有正在运行的进程的列表)

刚刚开始时杀死进程。

或者,如果您的计算机具有Windows 7(Windows 2008 ??),则可以使用AppLocker。 http://www.microsoft.com/windows/enterprise/products/windows-7/features.aspx#applocker让Windows阻止启动。

答案 8 :(得分:0)

你可能想看看这个产品:http://www.sassafras.com/licensing.html我个人无法忍受,但这是因为它符合你的描述。可能会为你节省一些编码。

答案 9 :(得分:0)

这是一个很长的镜头,但你可能会发现它很有帮助。

感知类型和应用程序注册 http://msdn.microsoft.com/en-us/library/cc144150(VS.85).aspx