我有一个Windows服务(进程 - x)启动另一个GUI应用程序(MVVM)(进程 - y)但是进程y是进程x的子进程。即使这些进程由于某种原因作为不同的用户帐户运行,正在为进程y创建的日志文件是在对进程x有效的位置创建的。 %USERPROFILE%环境变量正在日志文件的路径中使用。因此,对于运行为" LocalSystem"帐户环境变量正在评估为C:\ Windows \ SysWOW64 \ config \ systemprofile。对于作为当前登录窗口用户运行的进程y,正在评估环境变量以处理x的值而不是C:\ Users [loginID]。这是因为进程y是进程x的子进程。所以,我需要知道如何打破这种亲子关系。
我使用CreateProcessAsUser API从进程x创建进程y。
// flags that specify the priority and creation method of the process
int dwCreationFlags = NORMAL_PRIORITY_CLASS | CREATE_NEW_CONSOLE;
// create a new process in the current user's logon session
bool result = CreateProcessAsUser(usertoken, // client's access token
null, // file to execute
String.Format("{0} {1}", applicationName, arguments), // command line
ref sa, // pointer to process SECURITY_ATTRIBUTES
ref sa, // pointer to thread SECURITY_ATTRIBUTES
false, // handles are not inheritable
dwCreationFlags, // creation flags
IntPtr.Zero, // pointer to new environment block
workingDirectory, // name of current directory
ref si, // pointer to STARTUPINFO structure
out procInfo // receives information about new process
);
请告诉我如何删除亲子关系。
答案 0 :(得分:1)
问题是CreateProcessAsUser
仅使用给定用户的凭据(安全上下文)运行流程,但不使用任何配置文件信息。
MSDN页面http://msdn.microsoft.com/en-us/library/windows/desktop/ms682429(v=vs.85).aspx建议使用LoadUserProfile
和CreateEnvironmentBlock
加载配置文件和环境块。