C# 執行bat檔案 批處理 - 實現應用程式開機啟動功能

來源:互聯網
上載者:User

標籤:direct   功能   pause   eve   net   cto   wait   oid   擷取   

最近在做一個項目(平台 .net 4.0 winform)的時候,客戶要求軟體能提供開機啟動的設定選項

開始的時候,實現方法如下:

public class Boot    {        //寫入註冊表        public static void bootFromBoot(string ExeName, string ExePath)        {            RegistryKey rKey = Registry.LocalMachine;            RegistryKey autoRun = rKey.CreateSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run");                        try            {                autoRun.SetValue(ExeName, ExePath);            }            catch (System.Exception ex)            {                throw ex;            }        }        //刪除註冊表        public static void deleteFromBoot(string ExeName, string ExePath)        {            RegistryKey rKey = Registry.LocalMachine;            RegistryKey autoRun = rKey.CreateSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run");            try            {                //autoRun.DeleteValue(ExePath);                if (autoRun.GetValue(ExeName) != null)                    autoRun.DeleteValue(ExeName);            }            catch (System.Exception ex)            {                throw ex;            }        }

但是有個問題,應用程式沒有管理員權限的時候,寫入註冊表會失敗,在winform的項目屬性裡面開啟了擷取管理員權限

這回成功了,可以應用程式在win10系統上啟動並執行時候,無法將案頭捷徑拖進應用程式,報錯,

找到原因是:取消管理員權限的時候,在win10上就能正常運行了,但是開機啟動寫入註冊表就不行了,

腦袋瓜還是好使的(感謝上帝賜給的智慧),想到用windows的批次檔進行註冊表寫入

#region bat批處理        public static void CreateRegDeleteBat(string file_path, string key)        {            if (System.IO.File.Exists(file_path))            {                System.IO.File.Delete(file_path);            }            string bat = "@echo off" + "\r\n";            bat += "cacls.exe \"%SystemDrive%\\System Volume Information\" >nul 2>nul" + "\r\n";            bat += "if %errorlevel%==0 goto Admin" + "\r\n";            bat += "echo request Administrator" + "\r\n";            bat += "if exist \"%temp%\\getadmin.vbs\" del /f /q \"%temp%\\getadmin.vbs\"" + "\r\n";            bat += "echo Set RequestUAC = CreateObject^(\"Shell.Application\"^)>\"%temp%\\getadmin.vbs\"" + "\r\n";            bat += "echo RequestUAC.ShellExecute \"%~s0\",\"\",\"\",\"runas\",1 >>\"%temp%\\getadmin.vbs\"" + "\r\n";            bat += "echo WScript.Quit >>\"%temp%\\getadmin.vbs\"" + "\r\n";            bat += "\"%temp%\\getadmin.vbs\" /f" + "\r\n";            bat += "if exist \"%temp%\\getadmin.vbs\" del /f /q \"%temp%\\getadmin.vbs\"" + "\r\n";            bat += "exit" + "\r\n";            bat += ":Admin" + "\r\n";            bat += "echo delete reg" + "\r\n";            bat += "reg delete \"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\" /v " + key + " /f" + "\r\n";            //bat += "PAUSE";            System.IO.File.WriteAllText(file_path, bat, Encoding.Default);        }        public static void CreateRegAddBat(string file_path, string key, string exeFullPath)        {            if (System.IO.File.Exists(file_path))            {                System.IO.File.Delete(file_path);            }            string bat = "@echo off" + "\r\n";            bat += "cacls.exe \"%SystemDrive%\\System Volume Information\" >nul 2>nul" + "\r\n";            bat += "if %errorlevel%==0 goto Admin" + "\r\n";            bat += "echo request Administrator" + "\r\n";            bat += "if exist \"%temp%\\getadmin.vbs\" del /f /q \"%temp%\\getadmin.vbs\"" + "\r\n";            bat += "echo Set RequestUAC = CreateObject^(\"Shell.Application\"^)>\"%temp%\\getadmin.vbs\"" + "\r\n";            bat += "echo RequestUAC.ShellExecute \"%~s0\",\"\",\"\",\"runas\",1 >>\"%temp%\\getadmin.vbs\"" + "\r\n";            bat += "echo WScript.Quit >>\"%temp%\\getadmin.vbs\"" + "\r\n";            bat += "\"%temp%\\getadmin.vbs\" /f" + "\r\n";            bat += "if exist \"%temp%\\getadmin.vbs\" del /f /q \"%temp%\\getadmin.vbs\"" + "\r\n";            bat += "exit" + "\r\n";            bat += ":Admin" + "\r\n";            bat += "echo add reg" + "\r\n";            bat += "reg add \"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\" /v " + key + " /d " + "\"" + exeFullPath + "\"" + " /f" + "\r\n";            //bat += "PAUSE";            System.IO.File.WriteAllText(file_path, bat, Encoding.Default);        }        public static void RunBATfile(string file_path, string file_name)        {            Process pro = new Process();            pro.StartInfo.FileName = file_name;            pro.StartInfo.WorkingDirectory = file_path;            pro.StartInfo.CreateNoWindow = true;            pro.Start();            pro.WaitForExit();        }        #endregion

 

使用的時候這樣:

private void reg_add()        {            string exe_path = Application.StartupPath;            string file_name = "add_reg.bat";            string full_path = exe_path + "\\" + file_name;            string IconSyncPath = Application.ExecutablePath;            FileHelper.CreateRegAddBat(full_path, "IconSync", IconSyncPath);            FileHelper.RunBATfile(exe_path, file_name);        }        private void reg_delete()        {            string exe_path = Application.StartupPath;            string file_name = "delete_reg.bat";            string full_path = exe_path + "\\" + file_name;            FileHelper.CreateRegDeleteBat(full_path, "IconSync");            FileHelper.RunBATfile(exe_path, file_name);        }

 

C# 執行bat檔案 批處理 - 實現應用程式開機啟動功能

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.