protected override void OnStart(string[] args) { ----{服务启动成功;}Form1 f = new Form1(); f.Show(); f.Hide(); } 这样就显示出ICON了,一开始把那三句话放在了if {} else{//启动成功,放在这个后面就不对了},放在最外面就对了.但是ICOn的那些右键快捷方式用不了》,希望大家继续关注
服务里启动一个 winform.exe 当然这个service 必须是 allow service interact with desktop (允许服务与桌面交互) 然后可以用bat(net start、net stop)控制服务的启动,停止下面的代码可以让你在安装时将此选项勾选上: 【在 ProjectInstaller 里重写了 Commit 方法】public override void Commit(IDictionary savedState) { // set the service "allow service interact with desktop" as "true" // e.g. service can run "cmd.exe" var coOptions = new ConnectionOptions {Impersonation = ImpersonationLevel.Impersonate}; var mgmtScope = new ManagementScope(@"root\CIMV2", coOptions); mgmtScope.Connect(); var wmiService = new ManagementObject("Win32_Service.Name='" + serviceInstaller1.ServiceName + "'"); var inputParams = wmiService.GetMethodParameters("Change"); inputParams["DesktopInteract"] = true; var outParams = wmiService.InvokeMethod("Change", inputParams, null);
static void Main()
{
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new ServiceTest()
};
ServiceBase.Run(ServicesToRun); }里该怎么写,我试了好几个语句都不对,请教大家,谢谢
这是对的。不过需要在写一行 f.Hide();只要执行了这三行代码,托盘就已经出现了。
这是什么意思?要启动什么“窗体应用程序”?在你的服务程序中增加winform窗口,而不是什么另外的程序。
notifyIcon1.Visible = true;但是就是不出现呢
看看你ICO 的文件是已什么方式加入到程序中的 资源文件?
还是什么 确保文件正确
{
----{服务启动成功;}Form1 f = new Form1(); f.Show(); f.Hide();
}
这样就显示出ICON了,一开始把那三句话放在了if {}
else{//启动成功,放在这个后面就不对了},放在最外面就对了.但是ICOn的那些右键快捷方式用不了》,希望大家继续关注
然后可以用bat(net start、net stop)控制服务的启动,停止下面的代码可以让你在安装时将此选项勾选上:
【在 ProjectInstaller 里重写了 Commit 方法】public override void Commit(IDictionary savedState)
{
// set the service "allow service interact with desktop" as "true"
// e.g. service can run "cmd.exe"
var coOptions = new ConnectionOptions {Impersonation = ImpersonationLevel.Impersonate};
var mgmtScope = new ManagementScope(@"root\CIMV2", coOptions);
mgmtScope.Connect();
var wmiService = new ManagementObject("Win32_Service.Name='" + serviceInstaller1.ServiceName + "'");
var inputParams = wmiService.GetMethodParameters("Change");
inputParams["DesktopInteract"] = true;
var outParams = wmiService.InvokeMethod("Change", inputParams, null);
base.Commit(savedState);
}
两个进程可是两个EXE分别运行,一个是服务,一个是UI;或者是同一个EXE运行两次,根据启动参数来区别是作为服务还是UI。