本文主要讲述WinForm开发应用程序需要设置自启动功能,这个也是在实际开发中经常涉及到的,非常实用,所讲到的是通过注册表来控制程序是否自行启动,具体功能实现上两张图,更直观。
如下图:
程序设置保持界面实现代码
<code class="hljs cs has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">using</span> Microsoft.Win32; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">using</span> System; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">using</span> System.Collections.Generic; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">using</span> System.ComponentModel; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">using</span> System.Data; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">using</span> System.Drawing; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">using</span> System.IO; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">using</span> System.Linq; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">using</span> System.Text; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">using</span> System.Windows.Forms; <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// Author : 付义方</span> namespace Tools.App { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">partial</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">class</span> AutoRun : Form { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">string</span> KeyName = <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Tools数据导出服务程序"</span>; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-title" style="box-sizing: border-box;">AutoRun</span>() { InitializeComponent(); } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">private</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">button1_Click</span>(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">object</span> sender, EventArgs e) { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">try</span> { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">string</span> strName = Application.ExecutablePath; <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//string strnewName = strName.Substring(strName.LastIndexOf("\\") + 1);</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (AutoMenu.Checked) { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">this</span>.AutoMenu.Checked = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">true</span>; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (!File.Exists(strName))<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//指定文件是否存在 </span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span>; Microsoft.Win32.RegistryKey Rkey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"</span>, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">true</span>); <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (Rkey == <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span>) { Rkey = Microsoft.Win32.Registry.LocalMachine.CreateSubKey(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"</span>); } Rkey.SetValue(KeyName, strName + <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">" -s"</span>);<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//修改注册表,使程序开机时自动执行。 </span> MessageBox.Show(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"程序已设置自启动,重新启动计算机后即可生效!"</span>, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"提示"</span>, MessageBoxButtons.OK, MessageBoxIcon.Information); } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> { <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//修改注册表,使程序开机时不自动执行。 </span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">this</span>.AutoMenu.Checked = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">false</span>; RegistryKey Rkey = Registry.LocalMachine.OpenSubKey(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run"</span>, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">true</span>); <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (Rkey == <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span>) { Rkey = Microsoft.Win32.Registry.LocalMachine.CreateSubKey(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"</span>); } Rkey.DeleteValue(KeyName, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">false</span>); MessageBox.Show(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"程序已取消自启动设置!"</span>, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"提示"</span>, MessageBoxButtons.OK, MessageBoxIcon.Information); } } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">catch</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//没有权限会异常 </span> { MessageBox.Show(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"请您使用管理员权限打开应用程序!"</span>, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"提示"</span>, MessageBoxButtons.OK, MessageBoxIcon.Error); } } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">private</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">AutoRun_Load</span>(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">object</span> sender, EventArgs e) { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">try</span> { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">string</span> strName = Application.ExecutablePath; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (!File.Exists(strName))<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//指定文件是否存在 </span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span>; Microsoft.Win32.RegistryKey Rkey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"</span>, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">true</span>); <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (Rkey != <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span>) { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">string</span> val = Rkey.GetValue(KeyName).ToString(); <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (val == (strName + <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">" -s"</span>)) { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">this</span>.AutoMenu.Checked = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">true</span>; } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">this</span>.AutoMenu.Checked = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">false</span>; } } } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">catch</span> (Exception ex)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//没有权限会异常 </span> { <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//MessageBox.Show(ex.Message);</span> MessageBox.Show(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"请您使用管理员权限打开应用程序!"</span>, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"提示"</span>, MessageBoxButtons.OK, MessageBoxIcon.Error); } } } }</code>