2012-02-28 175 views
2

我已經寫了一個應該在Windows啓動時啓動的應用程序。我在HKCU \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Run中的Windows註冊中添加了一個條目。輸入已成功添加,但程序無法正常啓動。在Windows 7啓動時啓動程序(自動啓動)

我已經在Windows 7 64位上測試過應用程序。 應用程序需要有管理權限才能運行,也許這就是它不啓動的原因?

我看到也該條目的值不是引號,但其他人。這是強制性的嗎?

這裏是我的C#代碼:

  var registry = Registry.CurrentUser; 
      var key = registry.OpenSubKey(runKeyBase, true); 
      key.SetValue(KEY, directory + @"\" + filename); 
      Registry.CurrentUser.Flush(); 

我如何不能讓工作?

+0

可能的複製的 http://stackoverflow.com/questions/5127375/running-program-as-administrator-at-startup – Mohit 2012-02-28 18:20:23

+0

不,它沒有重複,因爲我的程序並不是所有的開始... – nosbor 2012-02-28 18:35:14

+2

如果你的路徑需要引號包含空格 – 2012-02-28 18:48:06

回答

3

至於我看到的,這是由於用戶訪問控制設置,僅允許簽名的應用程序啓動否則它會要求管理員權限。

由於這個啓動過程中,操作系統將根本無法運行,即使你做了註冊表設置的應用程序。

此外,報價不是強制性的。你可以擁有或不擁有。

我做的方法是放置一個快捷方式啓動文件夾。註冊表設置不起作用。

另外有一兩件事你可以嘗試是把/ SYSTEM32或/窗口的文件,然後嘗試在註冊表中設置。

+0

你能給我們更多的細節嗎?現在,單擊以admin身份運行,這是否意味着如果你這樣做,你的exe不需要清單文件?此外,當UAC完全啓用時(這是默認設置),這實際上會工作嗎?在UAC的默認設置下,它可以在Vista和Win7上運行嗎? 另外,關於system32和windows dirs,這實際上工作嗎?所以,我可以在第一次運行時獲得提升模式(沒​​問題),然後可以執行提升的註冊表更改,但在重新啓動/第二次運行時,UAC阻止了我的程序。將在這些dirs自動啓動位置解決問題? – 2012-07-09 00:44:59

+0

當您以管理員身份運行應用程序時,UAC不會提示,並且不需要嵌入任何清單文件。當您想通過簡單的雙擊來設置權限以運行應用程序時,需要清單文件。如果您雙擊或簡單地打開並且清單文件包含runasAdmin設置,則窗口將自動詢問提升。我第一次遇到這種情況,然後在其他時候失敗了......我想如果你想在啓動時運行它,你需要簽署應用程序,但是我從來沒有試過簽署我的個人應用程序,因爲我不想付錢爲此:) – Dinesh 2012-07-09 11:39:23

+0

不錯的主意,另外,你有沒有嘗試使用Windows任務計劃程序來擺脫提示?不知道爲什麼WIndows給開發者和用戶帶來了這個後門,它存在並且是有目的的。 upvoted。 – 2012-09-01 12:33:41

5

爲什麼不把快捷方式放在啓動文件夾中?這樣,你還可以設置快捷方式的屬性作爲管理員身份運行

編輯:

導航到你正在尋找在啓動時,右鍵點擊運行exe文件,創建快捷方式。

在該快捷方式的屬性中,選中以管理員身份運行。

然後把這個啓動文件夾(你可以通過點擊瀏覽在開始菜單中的文件夾就行了)。這將在Windows登錄時啓動該應用程序。如果UAC需要批准,它會提示用戶是否可以運行該程序。

+0

你能給我們提供更多細節嗎?現在,單擊以admin身份運行,這是否意味着如果你這樣做,你的exe不需要清單文件?此外,當UAC完全啓用時(這是默認設置),這實際上會工作嗎?在UAC的默認設置下,它可以在Vista和Win7上運行嗎?謝謝。 – 2012-07-09 00:42:33

+0

導航到您正在運行的exe文件,並右鍵單擊,創建快捷方式。在該快捷方式的屬性中,選中以管理員身份運行。然後將其放置在啓動文件夾中(可以通過單擊開始菜單中文件夾的瀏覽來獲得)。這將在Windows登錄時啓動該應用程序。如果UAC需要批准,它會提示用戶是否可以運行該程序。 – JeremyK 2012-07-09 15:37:40

+1

啊,是的,啓動文件夾是一個巧妙的技巧,當然自動嵌入作爲管理選項的運行到快捷方式是另一個好主意,這種方式你不需要一個清單文件 - 巧妙地使用任何有興趣的人。 Upvoted。 – 2012-09-01 12:31:15

0

您可以在啓動時自行提升程序。只需要在開始執行下面的代碼:

public static void runAsAdmin(string[] args) 
    { 
     ProcessStartInfo proc = new ProcessStartInfo(); 

     if (args != null) 
      proc.Arguments = string.Concat(args); 

     proc.UseShellExecute = true; 
     proc.WorkingDirectory = Environment.CurrentDirectory; 
     proc.FileName = System.Reflection.Assembly.GetExecutingAssembly().CodeBase; 
     proc.Verb = "runas"; 



     bool isElevated; 
     WindowsIdentity identity = WindowsIdentity.GetCurrent(); 
     WindowsPrincipal principal = new WindowsPrincipal(identity); 
     isElevated = principal.IsInRole(WindowsBuiltInRole.Administrator); 

     if (!isElevated) 
     { 

      try 
      { 
       Process.Start(proc); 
      } 
      catch 
      { 
       //No Admin rights, continue without them 
       return; 
      } 
      //Close current process for switching to elevated one 
      Environment.Exit(0); 
     } 
     return; 
    } 

也越來越管理員權限就可以禁用UAC的通知(如果啓用)可實現靜音開始在未來的後:

private void disableUAC() 
    { 
     RegistryKey regKey = null; 

     try 
     { 
      regKey = Registry.LocalMachine.OpenSubKey(ControlServiceResources.UAC_REG_KEY, true); 
     } 

     catch (Exception e) 
     { 
      //Error accessing registry 
     } 


     try 
     { 
      regKey.SetValue("ConsentPromptBehaviorAdmin", 0); 
     } 
     catch (Exception e) 
     { 
      //Error during Promt disabling 
     } 


    } 
相關問題