我有一个使用Visual Studio(2008)安装程序安装的Windows服务。我想避免以系统身份运行,所以我手动1)在计算机上创建一个新的Windows帐户,2)在安装过程中输入计算机名\用户名和密码。
我希望这需要很少的用户干预,所以我有兴趣创建一个新的Windows用户并自动提供计算机名称,用户名和密码。
我将如何做到这一点?
答案 0 :(得分:2)
简单的答案是使用网络 用户/添加 (/域),但有可能 自动化不仅仅是添加 用户,也是他/她的补充 组和模板的创建 用户帐户目录结构。许多 组织有一个基本结构 用word,excel目录和一些 模板文件。这可以自动化 用基本脚本。例如
REM addnew.bat
net user %1 password /add /homedir:\\<server>\users\%1 /scriptpath:login.bat /domain
net localgroup "<local group>" %1 /add
REM repeat for local groups
net group "<groups>" %1 /add /domain
REM repeat for global groups
xcopy \\<server>\users\template \\<server>\users\%1 /e
nltest /sync /server:BDCname
REM repeat for all BDCs you might be authenticating to
sleep 20
cacls \\<server>\users\%1 /e /r Everyone
REM remove the everyone permission to the directory
cacls \\<server>\users\%1 /g %1:F /e
cacls \\<server>\users\%1 /g Administrators:F /e
答案 1 :(得分:0)
在MSI中创建自定义操作以运行“sc.exe”命令(安装在WinXP和更新的系统上)。如果您担心sc.exe可能不在系统上,请将其包含在MSI中,二进制表中,或随产品一起安装。
在MSI创建服务后,让自定义操作运行以下内容(修改您自己的用户/通行证):
sc config the_service_name obj = thedomain \ johndoe 密码= stackoverflow
但请注意,以明文形式直接在MSI中存储密码是一个非常糟糕的主意。
一个简单(和基本)的解决方案是使用free tool CPAU加密上面的整个sc命令。您将从您自己的系统加密此命令(使用CPAU),然后将此编码的字符串传递给CPAU(您需要将其包含在MSI中,或者在您的自定义操作中安装在系统上)。 CPAU将解码您传入的字符串,该字符串将解码为上面的sc命令,并将更安全地在服务上设置用户名和密码。
答案 2 :(得分:-2)
我认为这会危及用户的安全,如果允许服务应用程序执行此操作,这也是一种不好的做法。它还会破坏当前的安全凭证。
据我所知,任何类型的Windows服务都运行一个应该是后台任务的任务,它总是在后台运行。而且它总是以这样的意图创建:运行后台任务并且它始终在运行,因此需要用户许可的任何类型的危险操作(即用户必须知道),例如创建新用户。
如果我没有弄错,那么无论如何,您的服务应用程序将始终创建新用户而无需任何通知,因为Windows服务始终在后台运行且没有任何UI。因此,在应用程序可维护性方面,也不建议这样做。更不用说调试Windows服务对我们很多人来说很难。