簡體   English   中英

從 Windows 服務設置注冊表不起作用

[英]Setting Registry from windows service does not work

我正在從作為本地系統運行的 Windows 服務中設置或讀取 reg 密鑰。 但是當我在注冊表編輯器中讀取或設置值時,它們與我從 Windows 服務中讀取和設置它們時的值不同。

如果我從 Windows 服務中的 powershell 中執行以下命令,或者當我以用戶身份登錄時,結果也會有所不同。 為什么? LocalSystem 帳戶是否有不同的 LocalMachine?

$DefaultUserName = (Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" -Name "DefaultUserName").DefaultUserName
Write-Host $DefaultUserName 

我正在使用以下 c# 行從 Windows 服務執行 powershell 腳本:

var process = new Process();
process.StartInfo.UseShellExecute = false;
process.StartInfo.FileName = @"C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe";
process.StartInfo.Arguments = "\"&'" + cacheFile + "'\"";
process.StartInfo.Verb = "runas";
process.Start();

你需要小心比特。 在 64 位 Windows 上,32 位應用程序使用“Windows on Windows”子系統運行,該子系統默認使用不同的文件系統路徑和注冊表路徑。 您正在從SysWOW64文件夾執行 powershell,這意味着您正在執行 32 位版本,它將使用 32 位注冊表配置單元。

如果您打開 regedit,您的注冊表項的 32 位配置單元是: Computer\\HKEY_LOCAL_MACHINE\\SOFTWARE\\WOW6432Node\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon 我懷疑您正在獲取/設置此值。

請參閱如何在不重定向到 WOW6432Node 的情況下使用 32 位 Powershell 訪問 64 位注冊表項以了解您可以采取的策略,包括使用Sysnative而不是SysWOW64版本的 powershell。

如果您需要支持 32 位和 64 位操作系統,則需要確保使用了適當的技術。

這個答案對 Windows 內置帳戶有很好的解釋: “本地系統”帳戶和“網絡服務”帳戶之間的區別?

與網絡服務非常相似的受限服務帳戶,旨在運行標准的最低特權服務。 但是,與網絡服務不同的是,它以匿名用戶的身份訪問網絡

完全受信任的帳戶,比管理員帳戶更受信任。 單機上沒有這個賬號做不到的事情,它有作為機器訪問網絡的權限(這需要Active Directory並授予機器帳戶權限)

您也可以嘗試以 SYSTEM 身份運行該服務嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM