C#程序重新启动的问题

lingdu_hua 2009-09-04 09:50:16
大家好。小弟在做一个winform程序时遇到这么个问题,现在需要这个程序有两个功能
1.只能运行该程序的一个实例,代码如下:

/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
if (!Program.PrevInstance())
{
Application.Run(new frmLogin());
}
}

Program.PrevInstance()是判断进程中是否有该程序的实例在运行了。如果没有运行就启动。
2.该程序可以实现重新启动,代码如下:

//重新启动程序
string strAppFileName = Process.GetCurrentProcess().MainModule.FileName;
Process myNewProcess = new Process();
myNewProcess.StartInfo.FileName = strAppFileName;
myNewProcess.StartInfo.WorkingDirectory = Application.ExecutablePath;
myNewProcess.Start();
System.Environment.Exit(0);

两端代码都可以正常运行,现在是加了代码1之后,自动重启功能就失效了,估计是在重启过程中该程序的进程没有完全关闭,被代码1给判断出来了,所以不会重启程序,请问各位大侠有没有什么好的解决方法呢?
...全文
397 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
cc_net 2009-09-04
  • 打赏
  • 举报
回复
用Mutex防止多重启动,重启也正常。结贴吧,哈

static void Main()
{
bool createdNew;
Mutex mutex = new Mutex(true, Application.ProductName, out createdNew);
if (!createdNew)
{
MessageBox.Show("多重启动");
return;
}
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
qlzf11140820 2009-09-04
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 shibinysy 的回复:]
要想实现这个功能最好在做其他的程序B来完成,B程序专门负责重启.B同时他可以监视你的程序是否完全退出.如果已经退出则启动
[/Quote]
up

也可以这样,1.只能运行该程序的一个实例
private bool PrevInstance()
{
string procName = System.Diagnostics.Process.GetCurrentProcess().ProcessName;
if ((System.Diagnostics.Process.GetProcessesByName(procName)).GetUpperBound(0) > 0)
{
return true;
}
else
{
return false;
}
}
private void Form1_Load(object sender, EventArgs e)
{
if (PrevInstance() == true)
{
MessageBox.Show("该服务已启动");
Application.Exit();
}
}


重启直接
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
System.Diagnostics.Process.Start(System.Reflection.Assembly.GetExecutingAssembly().Location);
}

供你参考
shibinysy 2009-09-04
  • 打赏
  • 举报
回复
要想实现这个功能最好在做其他的程序B来完成,B程序专门负责重启.B同时他可以监视你的程序是否完全退出.如果已经退出则启动
lingdu_hua 2009-09-04
  • 打赏
  • 举报
回复
现在的问题是,如果两段代码都加上,自动重启功能就不管用了。
如果注释掉代码1部分,就可以实现自动重启。
lingdu_hua 2009-09-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zgke 的回复:]
呵呵 看晕了  你程序只能保持一个进程....你程序重新启动..什么意思不是很明白..
[/Quote]
就是这个程序可以点某个按钮实现自动重启功能,代码2已经实现了。
另外呢,这个程序在一台机子上只可以运行一个实例,也就是不能同时打开多个嘛。
zgke 2009-09-04
  • 打赏
  • 举报
回复
呵呵 看晕了 你程序只能保持一个进程....你程序重新启动..什么意思不是很明白..

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧