我有一個可以更新本地電腦上的軟體的應用程式。我需要在使用者登入之前更新軟體,並且已經了解到透過RunServicesOnce
註冊表項運行應用程式可能是最適合用於此目的的方法。
但我無法找到此密鑰regedit
,而且它沒有出現在與 HKLM RunOnce 密鑰相同的位置HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce
。
- 這把鑰匙位於哪裡?在 Windows XP\Vista\7\8\8.1\10 中也一樣嗎?
- 我該如何使用它,有什麼可選參數嗎?
- 如何確定應用程式運行的用戶?它是由創建密鑰的用戶運行的嗎?如果
LocalSystem
服務建立金鑰,它將作為 運行嗎LocalSystem
?
答案1
RunServicesOnce 註冊表項在哪裡
我有一個可以更新本地電腦上的軟體的應用程式。我需要在使用者登入之前更新軟體
使用者登入 Windows 7 之前啟動程序
如果您希望它在使用者登入之前啟動,則必須將其作為服務啟動。以下是主要登錄項目的啟動順序,在讀取 bootmgr 後立即開始,並以兩個啟動資料夾中的程式捷徑條目結束。
- HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\BootExecute。這可以包括安排 chkdsk 運行但不包括用戶程式運行的指令。
- 接下來啟動服務,然後是 RunServicesOnce 和 RunServices 登錄項目(如果存在)
- 然後用戶登入系統
- HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\UserInit。它指向程式 C:\WINDOWS\system32\userinit.exe,並且條目以逗號結尾。其他程式可以透過附加它們並用逗號分隔來從此鍵啟動。
- HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell。這應該只包含一個條目:explorer.exe。
- 所有使用者的這 2 個登錄項目中的程式條目接下來開始: HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run 和 \RunOnce
- 接下來啟動目前使用者的這 2 個登錄機碼中的程式項目:HKCU\Software\Microsoft\Windows\CurrentVersion\Run 和 \RunOnce
- 所有使用者和目前使用者的啟動資料夾中的程式最後啟動。
防毒和防火牆等重要程序作為服務在序列的早期啟動。通知區域(螢幕右下角)中出現的圖示只是其使用者介面,即選項和首選項。
64 位元電腦中 32 位元軟體的附加位置是 HKLM\SOFTWARE\Wow6432Node 和 HKCU。
運行鍵和搜尋順序
註冊表甚至在 NT 核心載入之前就被訪問,因此了解電腦在啟動時配置為載入的內容非常重要。在系統啟動期間以不同 Windows 元件所使用的順序存取下列登錄機碼清單:
- HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\BootExecute
- HKLM\System\CurrentControlSet\Services(起始值為 0 表示核心驅動程序,在核心啟動之前載入)
- HKLM\System\CurrentControlSet\Services(起始值為2,自動啟動,3,透過SCM手動啟動)
- HKLM\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce
- HKCU\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce
- HKLM\Software\Microsoft\Windows\CurrentVersion\RunServices
- HKCU\Software\Microsoft\Windows\CurrentVersion\RunServices
- HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Notify
- HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Userinit
- HKCU\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell
- HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell
- HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\ShellServiceObjectDelayLoad
- HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnce
- HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnceEx
- HKLM\Software\Microsoft\Windows\CurrentVersion\Run
- HKCU\Software\Microsoft\Windows\CurrentVersion\Run
- HKCU\Software\Microsoft\Windows\CurrentVersion\RunOnce
- HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run
- HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run
- HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows\load
- HKLM\Software\Microsoft\Windows NT\CurrentVersion\Windows
- HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\SharedTaskScheduler(僅限 XP、NT、W2k)
- HKLM\Software\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs
筆記:在運行 64 位元體系結構和 64 位元版本 Windows 的系統上,其中一些金鑰也反映在 HKLM\Software\wow6432node 下。我不會在這篇文章中逐一介紹這些內容。
以 LocalSystem 帳戶執行您的服務,除非該帳戶需要存取網路資源,此時您需要建立一個網域服務帳戶,授予其對適用資源的存取權限,然後硬編碼其憑證以供該服務運作。在本機上,它將擁有所有內容的管理權限,並且不需要任何服務憑證密碼。
本機系統帳戶
這本地系統帳戶是預先定義的本機帳戶,由 服務控制經理。安全子系統無法識別此帳戶,因此您無法在呼叫中指定其名稱 尋找帳戶名功能。它在本地電腦上擁有廣泛的權限,並充當網路上的電腦。其代幣包括NT當局\系統和內建\管理員SID;這些帳戶可以存取大多數系統物件。所有區域設定中的帳戶名稱都是.\本地系統。名字,本地系統或者 電腦名稱\本機系統也可以使用。該帳戶沒有密碼。如果您在呼叫中指定 LocalSystem 帳戶 創建服務或者變更服務配置函數時,您提供的任何密碼資訊都會被忽略。