无法通过脚本

时间:2015-09-16 22:16:28

标签: c++ windows service registry createprocess

- 我有一个在本地系统下运行的服务(没有桌面交互)

- 我有一个.js脚本,可以在HKLM \ software \ ...

中进行简单的注册表更改

Snipet:

try{
var WshShell = new ActiveXObject("WScript.Shell");
regvalue = WshShell.ExpandEnvironmentStrings(regvalue);
WshShell.RegWrite(regkey, regvalue, regtype);
}

- 在通过命令提示符运行并双击

时,脚本成功修改了注册表

- 该脚本在完成后也会生成一个文本文件。 a" success.txt"或" error.txt"如果WshShell.RegWrite()"捕获"

这就是我在服务中调用脚本的方式(只有硬编码进行测试)

STARTUPINFO si = { sizeof(STARTUPINFO) };
si.cb = sizeof(si);
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_HIDE;
PROCESS_INFORMATION pi;
bool bRes = false;
TCHAR appCmdLine[] = TEXT("C:\\Windows\\SysWOW64\\wscript.exe //NOLOGO C:/Test/testpatchHKLM.js");
bRes = CreateProcess(NULL, appCmdLine, NULL, NULL, TRUE, CREATE_NO_WINDOW, NULL, NULL, &si, &pi);

CreateProcess返回true,成功文本文件由脚本创建,但注册表仍未修改。

注意:1)在许多其他地方提到将第一个参数发送为NULL,实际上这是我让脚本成功运行的唯一方法。 2)脚本没有UI或与用户交互 3)shellexecute产生相同的行为

我知道有一百万种更简单的方法可以实现这一目标,但我的目标是让这种方法有效

我假设wscript.exe没有权限,但我不应该得到usertoken和runas,因为服务正在创建进程...

0 个答案:

没有答案