我正在從作為本地系統運行的 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();
uj5u.com熱心網友回復:
你需要小心位元。在 64 位 Windows 上,32 位應用程式使用“Windows on Windows”子系統運行,該子系統默認使用不同的檔案系統路徑和注冊表路徑。您正在從SysWOW64檔案夾執行 powershell ,這意味著您正在執行 32 位版本,它將使用 32 位注冊表配置單元。
如果您打開 regedit,您的注冊表項的 32 位配置單元是:Computer\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows NT\CurrentVersion\Winlogon. 我懷疑您正在獲取/設定此值。
請參閱如何使用 32 位 Powershell 訪問 64 位注冊表項而無需重定向到 WOW6432Node,了解您可以采取的策略,包括使用Powershell的Sysnative而不是SysWOW64版本。
如果您需要支持 32 位和 64 位作業系統,則需要確保使用了適當的技術。
uj5u.com熱心網友回復:
這個答案對 Windows 內置帳戶有很好的解釋: “本地系統”帳戶和“網路服務”帳戶之間的區別?
與網路服務非常相似的受限服務帳戶,旨在運行標準的最低特權服務。但是,與網路服務不同,它以匿名用戶身份訪問網路
完全受信任的帳戶,比管理員帳戶更受信任。單機上沒有這個賬號做不到的事情,它有作為機器訪問網路的權限(這需要Active Directory并授予機器帳戶權限)
您也可以嘗試以 SYSTEM 身份運行該服務嗎?
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/339021.html
