C#系统服务的问题。WINFORM程序。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#系统服务的问题。WINFORM程序。相关的知识,希望对你有一定的参考价值。

问题一:怎么样才能在WInform 中用列表模式显示 本机的所有系统服务。用个文本也行。最好用DataGridView显示。然后在窗体上对这些显示的服务进行 开启和关闭;
为题二:我现在已经编写好了一个 服务。可是我想启动我的这个WINFORM窗体。就是说,在服务启动的时候 连带着把我的程序也给启动。并且是在用户桌面上能够看到。
看下我的代码。
protected override void OnStart(string[] args)

System.Diagnostics.Process.Start("C:\\Documents and Settings\\Administrator\\桌面\\GetPage\\MyPagebin\\Debug\\MyPage.exe");

当初别人告诉我说是写到这个OnStart 里面。可是 服务启动以后 MyPage.exw根本没反映。

后来我就把它写到这个里面。
public void ChkSrv(object source, System.Timers.ElapsedEventArgs e)

System.Diagnostics.Process.Start("C:\\Documents and Settings\\Administrator\\桌面\\GetPage\\MyPagebin\\Debug\\MyPage.exe");

可还是没有启动 MyPage.exe程序。
我想这句启动MyPage.exe的话应该是没错。可就是不知道该放到哪里?还有应该怎么写
System.Diagnostics.Process.Start("C:\\Documents and Settings\\Administrator\\桌面\\GetPage\\MyPagebin\\Debug\\MyPage.exe");
求高手指点下。满意追加400分。

仍用你原来的第一方案:

protected override void OnStart(string[] args)

                    

 System.Diagnostics.Process.Start("C:\\\\Documents and Settings\\\\Administrator\\\\桌面\\\\GetPage\\\\MyPagebin\\\\Debug\\\\MyPage.exe");

         

要修改服务的属性:见图

追问

这个服务里面就一个业务
protected override void OnStart(string[] args)

System.Diagnostics.Process.Start("C:\\Documents and Settings\\Administrator\\桌面\\GetPage\\MyPagebin\\Debug\\MyPage.exe");

打开这个程序。其他的什么都没写。
可是 服务却启动不了。

追答

就是说,你的这个服务还没有开启,也就没法谈 启动MyPage.exe 了?
首先要把服务搞定!

我给你个vs2008的工程,包含服务及其安装程序。

下载地址:
ysz888888y 永硕E盘ys168

参考技术A /// <summary> /// 服务启动的操作 </summary>
/// <param name="args"></param>
protected override void OnStart(string[] args)

StartHello();

private void StartHello()

using (Process process = new Process())

//创建进程对象
ProcessStartInfo startinfo = new ProcessStartInfo(); //创建进程时使用的一组值,如下面的属性
startinfo.FileName = "C:\\Documents and Settings\\Administrator\\桌面\\GetPage\\MyPagebin\\Debug\\MyPage.exe"; //设定需要执行的命令程序

//以下是隐藏cmd窗口的方法
startinfo.Arguments = args; //设定参数,要输入到命令程序的字符
startinfo.UseShellExecute = false; //不使用系统外壳程序启动
startinfo.RedirectStandardInput = false; //不重定向输入
startinfo.RedirectStandardOutput = true; //重定向输出,而不是默认的显示在dos控制台上
startinfo.CreateNoWindow = false; //不创建窗口
startinfo.WindowStyle = ProcessWindowStyle.Hidden; 关掉窗口
process.StartInfo = startinfo;

process.Start()//开始进程




建议你不要使用含有中文的路径 你试试呢
参考技术B 我的思路是你做一个脚本 这个脚本是打开winform程序的 然后在启动服务时就是在OnStart里执行这个脚本就可以了 qq1203982512 参考技术C 可以代替IIS的web服务器,楼主可以搜索下 Cassini++(可运行在linux下)和Cassinidev

如果楼主想的是把网站装s在家里的机器,外界可以通过互联网访问,可以考虑使用花生壳软件(动态ip),机器不能关机。

也可以找主机提供商,购买域名,把网站发布在虚拟空间上本回答被提问者采纳

C# WinForm应用程序降低系统内存占用方法总结

WinForm程序点用一直是个大问题,时间运行长了,越来越大,最近在网上发现个贴,试了上面方法,从进程来看,内存确实降下去了,效果还不错。

 

这里整理了一些网上关于Winform如何降低系统内存占用的资料,供参考:

1、使用性能测试工具dotTrace 3.0,它能够计算出你程序中那些代码占用内存较多
2、强制垃圾回收
3、多dispose,close
4、用timer,每几秒钟调用:SetProcessWorkingSetSize(Process.GetCurrentProcess().Handle, -1, -1);具体见附录。
5、发布的时候选择Release
6、注意代码编写时少产生垃圾,比如String + String就会产生大量的垃圾,可以用StringBuffer.Append
7、this.Dispose();    this.Dispose(True);   this.Close();    GC.Collect();  
8、注意变量的作用域,具体说某个变量如果只是临时使用就不要定义成成员变量。GC是根据关系网去回收资源的。
9、检测是否存在内存泄漏的情况,详情可参见:内存泄漏百度百科

附录:定期清理执行垃圾回收代码:
//在程序中用一个计时器,每隔几秒钟调用一次该函数,打开任务管理器,你会有惊奇的发现
#region 内存回收
[DllImport("kernel32.dll", EntryPoint = "SetProcessWorkingSetSize")]
public static extern int SetProcessWorkingSetSize(IntPtr process, int minSize, int maxSize);
/// <summary>
/// 释放内存
/// </summary>
public static void ClearMemory()
{
GC.Collect();
GC.WaitForPendingFinalizers();
if (Environment.OSVersion.Platform == PlatformID.Win32NT)
{
App.SetProcessWorkingSetSize(System.Diagnostics.Process.GetCurrentProcess().Handle, -1, -1);
}
}
#endregion

 

 

原文:https://www.jb51.net/article/56682.htm

以上是关于C#系统服务的问题。WINFORM程序。的主要内容,如果未能解决你的问题,请参考以下文章

asp.net和winform程序上的区别都有哪些?

C# WinForm应用程序降低系统内存占用方法总结

C# 管理员身份运行程序

怎样把C#程序部署到PDA上

c# winform程序发布后运行时出现的一个问题

c# winform打包后,安装上之后没法运行?