首页 新闻 会员 周边

为什么服务器会自动关闭我运行的.exe呢

0
悬赏园豆:5 [已解决问题] 解决于 2014-05-22 17:10

最近与其他部门做数据共享,写了个定期上传数据的C# Winform窗体程序,就把它挂在服务器上每天凌晨00:00:00Run一次,但是很郁闷的是,这个程序总是会自动关闭,我控制其关闭时写Log,发现关闭的时间很不确定,有时一两天就关闭了,有时候就是几个小时就关闭了,是什么原因呢?谁遇到过呢,能解决下吗~~~

LgV5的主页 LgV5 | 菜鸟二级 | 园豆:221
提问于:2014-05-19 17:26
< >
分享
最佳答案
0

以管理员身份运行

收获园豆:3
刘宏玺 | 专家六级 |园豆:14020 | 2014-05-19 20:20

这个应该就是用管理员身份登陆的吧。。

LgV5 | 园豆:221 (菜鸟二级) | 2014-05-19 20:38

@车上有首长: 你远程桌面是什么用户登录的?

刘宏玺 | 园豆:14020 (专家六级) | 2014-05-19 20:53

@博客¥: 这个不是很清楚,我把程序写好了,配置文件,DLL什么的发给她,然后她放服务器上的,表示总是会自动退出,我也不清楚用的是什么权限的用户登录,我觉得应该就是管理员吧,还有就是非管理员用户登录有区别吗?

LgV5 | 园豆:221 (菜鸟二级) | 2014-05-19 20:59

@车上有首长: 

比如在linux系统中,

比如我以zz的身份登入, 并且zz用户有root权限,看到的当前进程部分如下:

那么当我zz断开登入之后,原来的进程中,以zz用户启动的进程将全部退出

-------------------------------------

希望上述信息对你有所帮助

grassofsky | 园豆:342 (菜鸟二级) | 2014-05-19 21:10

@grass of moon: 可是这是windows server2003,并且为什么进程的退出并不是我退出之后很短的时间久退出,而是有可能过个一天两天,有时就几个小时?我用mstsc登陆进去开启程序,然后我关闭桌面,应该不算是退出吧...服务器还是正常在运行的,搞不太懂

LgV5 | 园豆:221 (菜鸟二级) | 2014-05-19 21:14

@车上有首长: 

为了搞定是不是因为用户退出引起的,可以进行如下尝试:

1. 以一个用户名a登入,任意运行程序,查看当前进程信息,也可以看得到用户的吧

2. 然后退出用户a, 以用户b登入,再次查看进程信息

windows server应该可以看到不同用户的进程信息的吧

-------------------------------------

由于没有使用过该系统,如有不足,表示理解

grassofsky | 园豆:342 (菜鸟二级) | 2014-05-19 21:27

@grass of moon: 非管理员身份登录可能会被注销

刘宏玺 | 园豆:14020 (专家六级) | 2014-05-19 22:02
其他回答(6)
0

服务器怎么会自动关你的程序呢;应该是你的程序自己挂了;

Devin Mao | 园豆:596 (小虾三级) | 2014-05-19 17:39

程序也就是晚上会跑一次,我在里面有一个timer控件,如果当前时间等于下一次上传时间,那么它就会上传资料,上传完毕了,就不会做任何动作了啊,就是timer控件每隔一秒计时判断,是不是这个timer问题?

支持(0) 反对(0) LgV5 | 园豆:221 (菜鸟二级) | 2014-05-19 17:43
0

1楼没错.基本上是自己奔溃了

吴瑞祥 | 园豆:29449 (高人七级) | 2014-05-19 17:42

没有吧,如果说是上传资料的时候出现了错误,自动关闭,那么这个可以理解,问题是它是在闲时关闭的,就是并不是传资料的时候,上传资料顶多半分钟,但是程序有可能是白天会关闭,有可能是任何时候,并不会是因为操作DB出现异常导致的关闭。这才是我郁闷的原因

支持(0) 反对(0) LgV5 | 园豆:221 (菜鸟二级) | 2014-05-19 17:47
0

多线程内部异常未捕捉,会直接关闭程序,这是大部分情况

加个线程内部异常捕捉

比如

      Application.ThreadException += Application_ThreadException;

 

static void Application_ThreadException(object sender, ThreadExceptionEventArgs e)
{
try
{
Log.Fatal(e.Exception);
coll.Remove(query);
}
catch (Exception ex)
{
Log.Fatal(ex);
}


}

cclient | 园豆:264 (菜鸟二级) | 2014-05-19 18:02

骚年你这函数里面的query是什么对象?还有Log静态类需要引用什么?

支持(0) 反对(0) LgV5 | 园豆:221 (菜鸟二级) | 2014-05-19 20:36
0

对于定时任务,linux的服务器可以采用crontab处理定时任务,

windows下也可以采用类似的方式进行执行,见:http://www.hdj.me/crontab-for-windows

 

------------------------------------------------

希望对你有所帮助~

收获园豆:2
grassofsky | 园豆:342 (菜鸟二级) | 2014-05-19 18:39

可是这个跟我用Timer计时器判定当前时间和下一次执行时间是否一致有区别吗~~并且如果用你说的那个工具的话,假如因为某些问题程序异常,而那边急需要数据,我需要现在立即重启,上传数据,然后重新恢复到每天晚上0点执行,这个对于第一次执行时间的控制,貌似只有用代码控制吧。不过还是谢谢你,以后写别的还是可以参考下

支持(0) 反对(0) LgV5 | 园豆:221 (菜鸟二级) | 2014-05-19 20:35
0

服务器可能会注销长时间不登入的用户,这样这用户下的程序都会被自动关闭(是关闭不是异常),首先你把自动注销用户取消掉,其次你这种类型的程序不要用WINFORM你直接写个WIN SERVICE

56180825 | 园豆:1756 (小虾三级) | 2014-05-19 19:27

不是吧,我并没有注销用户啊,我只是远程登录服务器,然后点X退出而已,然后过个不确定的时间去看,居然就不见运行的程序了

支持(0) 反对(0) LgV5 | 园豆:221 (菜鸟二级) | 2014-05-19 20:39
0

搞个Win服务多好

魔多 | 园豆:1015 (小虾三级) | 2014-05-20 08:41
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册