Periodically shut down a program
我想杀死一个名为Knightonline的游戏的可执行文件,并拒绝用户运行它。我正在使用:
1 | Process.Start("taskkill.exe","/f /im kol.exe"); |
但它显示了一个命令窗口。如何隐藏命令窗口,或者是否有其他专业但臭名昭著的方法来拒绝不需要的程序?
编辑:我编辑主机和阻止登录页面的游戏作为解决方案。
是否最好不要让用户首先启动程序?
Windows2000及更高版本(XP、Vista,"七")具有软件限制策略-允许您设置程序白名单或黑名单。在白名单的情况下,只允许启动列出的程序,而在黑名单的情况下,除了列出的程序外,其他所有程序都允许启动。此检查发生在操作系统级别,无法绕过(管理员除外)。示例请参见例如。
(黑名单是相当无效的,因为重命名可执行文件允许再次运行它;白名单是更多的工作,以获得正确和管理-但大多数用户最多需要20个应用程序,加上系统服务)
注意:并非所有版本的Windows都允许管理员设置组策略,IIRC在Windows XP Home或Vista Home Basic中不能这样做。
此外,用户将是用户:如果你阻止本地游戏,他们将玩Flash浏览器游戏;如果你阻止Flash,他们将在浏览器JavaScript游戏中玩;如果你阻止,他们将玩纯HTML文本冒险游戏(而你无意中阻止了大多数其他网站的运行,这是理所当然的)。
如果你阻止了这一点,用户将放弃电脑而去吸烟,或者带上纸牌和玩纸牌IRL,或者找到无数其他避免工作的方法(假设我们谈论的是Office用户),所以这也不是一个胜利;除非你试图让用户离开电脑(从你的评论中看)。
专业的方法是让用户知道一些正在运行的程序可能会造成冲突,并要求用户在继续之前关闭它。
在沉默中杀死它,甚至不说"我们道歉"是邪恶的。
如果要在隐藏窗口中运行某个进程,请尝试此操作:
1 2 3 4 5 6 7 8 | var processInfo = new ProcessStartInfo() { Arguments ="/f /im kol.exe", FileName ="taskkill.exe", WindowStyle = ProcessWindowStyle.Hidden }; Process.Start(processInfo ); |
您可以使用process.kill来终止另一个进程:
1 2 3 4 | foreach (var process in Process.GetProcessesByName("kol")) { process.Kill(); } |