首先,这是 serverfault 和超级用户之间的边界问题之一。最后,我决定将其归入此处,因为它的大多数方面都围绕域环境展开。
另一个警告是,这是一个非常具体的场景,针对的是一个非常普遍的问题。如果只是问这个问题本身,那么显而易见的答案是使用启动脚本而不是登录脚本。但是,这实际上不是一个选择。
首先,最终目标很简单,就是在 Windows 10 中实现真正的漫游配置文件部署,无需借助第三方应用程序。在设计进入最后阶段时,我们遇到了最后一个障碍,这是一个真正的障碍。我们如何漫游开始菜单?
经过许多(我确实是说许多)不同的想法和尝试之后,我们找到了有效的方法。
复制 %LocalAppData%\TileDataLayer\Database 文件夹
太好了,所以我可以将整个文件夹复制到网络共享,然后将其重新复制到任何计算机,以获得真正漫游的开始菜单。现在,我想使用登录脚本从共享中复制,使用注销脚本复制到共享,从而自动完成此过程。很简单,对吧?错了,为了复制文件夹,您必须先停止“Tile Data Model Server”服务(顺便说一下,该服务只会停止一小段时间,然后会自动重新启动)。
现在,我们来谈谈问题的关键。Net Stop 命令要求您运行提升的提示符,登录/注销脚本仅在本地用户上下文中运行,而启动/关机脚本无法复制特定用户的开始菜单。显然,我不能将其拆分为两个单独的脚本,并将一个放在启动中,另一个放在登录中,因为该服务只会停止一瞬间。
最终,我目前的想法是要么找到某种方法在未提升的提示符下运行 net stop,要么让命令在未提升的情况下运行。有没有办法做到这两点?或者,有没有更简单的方法让该文件夹漫游?
我非常清楚将脚本作为计划任务运行的解决方法,但发现这是一个糟糕的解决方案。
答案1
由于这是一项您可以停止的服务,因此请让脚本禁用该服务,然后将其停止,复制所需的内容,重新启用它,然后启动它。为了禁用该服务,您需要使用注册表。
这里有龙。
以下内容含有潜在危险信息。请自行承担风险。
将以下密钥导出到您可以访问的文件:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tiledatamodelsvc
并将此“干净”密钥保存在安全位置。接下来,删除除ImagePath
行之外的所有内容,然后将该行更改为其他内容,例如:%systemroot%\system32\svchostNOMORE.exe -k appmodel
然后将此“损坏”密钥保存到其他安全位置,普通用户无法访问它。
reg import "Path to 'corrupted' registry key"
net stop "ServiceName"
copy PathtoServer PathtoLocalStorage
reg import "Path to 'clean' registry key"
net start "Servicename"
这可能会暂时破坏星形菜单,但我能够简单地用 终止浏览器,taskkill /f /im explorer.exe
然后用 重新启动它,explorer.exe
然后开始菜单就可以再次使用了。不过,我没有修改任何图块数据,因此您的情况可能会有所不同。