![在启动时以分离和作为另一个用户运行程序?](https://linux22.com/image/689131/%E5%9C%A8%E5%90%AF%E5%8A%A8%E6%97%B6%E4%BB%A5%E5%88%86%E7%A6%BB%E5%92%8C%E4%BD%9C%E4%B8%BA%E5%8F%A6%E4%B8%80%E4%B8%AA%E7%94%A8%E6%88%B7%E8%BF%90%E8%A1%8C%E7%A8%8B%E5%BA%8F%EF%BC%9F.png)
我需要运行 dnscrypt-proxy:
1. 在启动或登录时自动运行
2. 无窗口(不附加到 cmd.exe)
3. 作为另一个用户(不是我的用户名)
如果我使用 cmd.exe runas
,那么当我关闭 cmd.exe 时,dnscrypt-proxy.exe 也会关闭。它不会与 cmd.exe 分离:
runas /savecred /user:anotheruser "path-to\dnscrypt-proxy.exe"
将 dnscrypt-proxy.exe 作为服务运行将使其分离运行,但我如何才能让它也以另一个用户的身份运行?
我想使用 Windows 10 Home 附带的任何程序,而不是依赖第三方软件。
答案1
我尝试使用cmd.exe
,start
但runas
无济于事。
我尝试使用services.msc
,但taskschd.msc
无济于事。
唯一有效的是这个 PowerShell 脚本。将这些行放入文件中.ps1
,C:\Users\yourusername\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\filename.ps1
即可按预期工作。(可能C#
也可以工作,但我没有研究过。)
$username = "otherusername"
$password = "password"
$credentials = New-Object System.Management.Automation.PSCredential -ArgumentList @($username,(ConvertTo-SecureString -String $password -AsPlainText -Force))
Set-Location "C:\Program Files\dnscrypt-proxy-win64"
Start-Process -FilePath ".\dnscrypt-proxy.exe" -Credential ($credentials) -ArgumentList "--resolver-name=dnscrypt.eu-dk
--resolvers-list=dnscrypt-resolvers.csv" -WindowStyle Hidden
Start-Sleep -Seconds 5
if (Get-Process | Where-Object {$_.path -eq "C:\Program Files\dnscrypt-proxy-win64\dnscrypt-proxy.exe"})
{
# program is running
} else {
# program is NOT running
New-Item -ItemType file -Path C:\Users\yourusername\Desktop\dnscrypt-proxy-failed-to-start.txt
}
答案2
您可以尝试使用该start
命令以分离方式运行 runas 命令。
C:\start runas /savecred /user:anotheruser "path-to\dnscrypt-proxy.exe"
(在这里你可以找到有关启动命令的更多信息http://www.robvanderwoude.com/ntstart.php)