我的程序启动一个进程,我需要确保它在我可以再次运行程序之前被杀死。 为了做到这一点,我想将进程的开始时间存储为类似互斥体的内容,以便稍后检索并检查是否有进程具有匹配的名称和启动时间。
我怎么能这样做? 我不想在用户注销后坚持的硬盘上粘贴任何东西。
作为参考,我正在使用C#和.NET
如果打开DDE频道的应用程序崩溃,会发生什么情况?
.NET Charting图例标记大小
从IntPtr句柄获取Control / Form对象
检测符号链接,连接点,挂载点和硬链接
从.NET注册免费激活本机COM(activex)组件
当创build一个新线程时,对GUI的更改没有被制作(C#)
我可以在TransactionScope块中使用sqlConnection.BeginTransaction
用于.NET的可编程RAM磁盘API?
多次将相同的滤镜添加到DirectShowgraphics
OraolEDB.Oracle提供程序未在本地计算机上注册
您想要存储进程ID,而不是进程名称和开始时间。 这将使杀死进程变得更简单。 您可以将文件存储在%TMP%中,以便在硬盘驱动器空间不足时进行清理。
杀死进程的C#代码如下所示:
int pID = Convert.ToInt32(file.ReadAllText(pIDfile)); Process proc = Process.GetProcessByID(pID); proc.Kill();
你可以找到这样的%TMP%目录:
var tmp = Environment.GetEnvironmentvariable("TMP");
编辑:PID可以重复使用,所以你也需要处理。
我同意rossfabricant应该存储进程ID而不是名称。 进程ID不能重新使用,直到重新启动,所以这应该是安全的。
不过,我建议不要使用TMP环境变量进行存储,而应该查看“ 隔离存储” 。 就存储而言,这将更加面向.NET。 而且,它会降低运行应用程序所需的安全性。
不幸的是,注销之后,临时目录和孤立的存储都将保留,所以你需要逻辑来处理这种情况。 (然而,你的应用程序可以清除关闭的信息)。
如果您可以访问正在启动的进程代码,则最好使用命名管道或共享内存来检测应用程序是否正在运行。 这也给你一个更简洁的方法来关闭这个过程。 杀死一个进程应该是最后的手段 – 总的来说,我不会在设计需要杀死一个进程的时候建立一个应用程序,如果这个进程完全可以避免的话。
总结以上是内存溢出为你收集整理的全系统持久性存储?全部内容,希望文章能够帮你解决全系统持久性存储?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)