开机启动 windows 服务
1、cmd指令,只支持服务软件,一般的控制台运行不起来
sc create ceshi binpath= D:\ceshi\ceshi.exe type= own start= auto displayname= ceshi
2、c# 新建windows服务项目
https://www.1633.com/article/67350.html 基于C#实现Windows服务
3、NSSM工具
nssm可以替代 sc 指令,sc指令不能把普通控制台作为服务。
nssm的服务本质是把nssm作为服务,传参就是控制台程序。
C:\Program Files\dotnet
nssm.exe放到dotnet的文件夹,这个文件有自动配置环境变量。
可以在cmd直接运行nssm指令
nssm install xxxx
4、Topshelf 搭建 Windows 服务 C#类库
测试 win7失败 注意杀毒软件
5、winform开机启动
string path = Application.ExecutablePath; RegistryKey rk = Registry.CurrentUser; RegistryKey rk2 = rk.CreateSubKey(@"Software\Microsoft\Windows\CurrentVersion\Run"); rk2.SetValue("HTSDServices", path); rk2.Close(); rk.Close();
6、winsw 注册成服务
7、开始菜单用快捷方式运行登录启动
AutoStart a = new AutoStart();
a.ShortCutDelete(System.Windows.Forms.Application.ExecutablePath, Environment.GetFolderPath(Environment.SpecialFolder.Startup));
a.ShortCutCreate("Daemon_AOI上传数据程序", System.Windows.Forms.Application.ExecutablePath, Environment.GetFolderPath(Environment.SpecialFolder.Startup));
加域系统,每一个账号都要点一下生成开始菜单的启动快捷方式。每个账号登录进去,自动启动。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Diagnostics;
using IWshRuntimeLibrary;
//https://blog.csdn.net/capsclock/article/details/128373102
namespace Daemon_AOI
{
internal class AutoStart
{
/// <summary>
/// 快捷方式的显示名称
/// </summary>
private string _ShortCutName;
/// <summary>
/// 程序的完整路径
/// </summary>
private string _AppPath;
/// <summary>
/// 操作系统的自启动目录
/// C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup
/// C:\Users\[用户名]\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
/// </summary>
private string _SysAutoStartPath;
/// <summary>
/// 操作系统桌面的路径
/// </summary>
private string _SysDesktopPath;
public string ShortCutName { set => _ShortCutName = value; get => _ShortCutName; }
public string AppPath { get => _AppPath; }
public string SysAutoStartPath { get => _SysAutoStartPath; }
public string SysDesktopPath { get => _SysDesktopPath; }
/// <summary>
/// 构造函数
/// </summary>
/// <param name="shortCutName">快捷方式的显示名称</param>
public AutoStart(string shortCutName = null)
{
_ShortCutName = shortCutName;
_AppPath = Process.GetCurrentProcess().MainModule.FileName;
_SysAutoStartPath = Environment.GetFolderPath(Environment.SpecialFolder.Startup);
_SysDesktopPath = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
}
/// <summary>
/// 获取指定文件夹下的所有快捷方式(不包括子文件夹)
/// </summary>
/// <param target="">目标文件夹(绝对路径)</param>
/// <returns></returns>
public List<string> GetDirectoryFileList(string target)
{
List<string> list = new List<string>();
list.Clear();
string[] files = Directory.GetFiles(target, "*.lnk");
if (files == null || files.Length == 0)
{
return list;
}
for (int i = 0; i < files.Length; i++)
{
list.Add(files[i]);
}
return list;
}
/// <summary>
/// 获取快捷方式中的目标(可执行文件的绝对路径)
/// </summary>
/// <param name="shortCutPath">快捷方式的绝对路径</param>
/// <returns></returns>
public string GetAppPathViaShortCut(string shortCutPath)
{
try
{
WshShell shell = new WshShell();
IWshShortcut shortct = (IWshShortcut)shell.CreateShortcut(shortCutPath);
//快捷方式文件指向的路径.Text = 当前快捷方式文件IWshShortcut类.TargetPath;
//快捷方式文件指向的目标目录.Text = 当前快捷方式文件IWshShortcut类.WorkingDirectory;
return shortct.TargetPath;
}
catch
{
return null;
}
}
/// <summary>
/// 判断快捷方式是否存在
/// </summary>
/// <param name="path">快捷方式目标(可执行文件的绝对路径)</param>
/// <param name="target">快捷方式所在目录(绝对路径)</param>
/// <returns></returns>
public bool ShortCutExist(string path, string target)
{
bool Result = false;
List<string> list = GetDirectoryFileList(target);
foreach (var item in list)
{
if (path == GetAppPathViaShortCut(item))
{
Result = true;
}
}
return Result;
}
/// <summary>
/// 删除快捷方式(通过快捷方式目标进行删除)
/// </summary>
/// <param name="path">快捷方式目标(可执行文件的绝对路径)</param>
/// <param name="target">快捷方式所在目录(绝对路径)</param>
/// <returns></returns>
public bool ShortCutDelete(string path, string target)
{
bool Result = false;
List<string> list = GetDirectoryFileList(target);
foreach (var item in list)
{
if (path == GetAppPathViaShortCut(item))
{
System.IO.File.Delete(item);
Result = true;
}
}
return Result;
}
/// <summary>
/// 创建快捷方式
/// </summary
/// <param name="name">快捷方式名称</param>
/// <param name="path">快捷方式目标(可执行文件的绝对路径)</param>
/// <param name="target">快捷方式所在目录(绝对路径)</param>
/// <returns></returns>
public bool ShortCutCreate(string name, string path, string target)
{
bool Result = false;
try
{
// 判断快捷方式是否存在
if (ShortCutExist(path, target))
{
return false;
}
// 如果文件夹不存在则创建
if (!Directory.Exists(target)) Directory.CreateDirectory(target);
// 快捷方式的路径
string ShortCutPath = Path.Combine(target, string.Format("{0}.lnk", name));
// 创建快捷方式对象
WshShell Shell = new WshShell();
IWshShortcut ShortCut = (IWshShortcut)Shell.CreateShortcut(ShortCutPath);
// 设置快捷方式目标路径
ShortCut.TargetPath = path;
// 设置快捷方式目标文件夹
ShortCut.WorkingDirectory = Path.GetDirectoryName(path);
// 设置运行方式,默认为常规窗口
ShortCut.WindowStyle = 1;
// 保存快捷方式
ShortCut.Save();
Result = true;
}
catch
{
Result = false;
}
return Result;
}
}
}
www.erwa.cn 二娃制作

浙公网安备 33010602011771号