控制台应用程序启动另一个无法访问的进程环我有一个VB6可执行文件,它访问一些系统环境变量。我已经实现了一个.NET控制台应用程序来检查这些环境变量是否存在,必要时创建它们,然后通过调用Process.Start运行VB6应用程序。这样做,VB6应用程序找不到环境变量,它说它们不存在。如果我从Windows资源管理器运行VB6应用程序,它工作正常并且可以找到变量。所以看起来VB6应用程序运行在.NET控制台应用程序的上下文中,无法访问系统环境变量!设置环境变量的代码.NETCosnole应用程序:if(string.IsNullOrEmpty(envVar){Environment.SetEnvironmentVariable(varObject.Name,varObject.Value,EnvironmentVariableTarget.Machine);}}从.NETCosnole应用程序运行VB6应用程序的代码:varprocessInfo=newProcessStartInfo(VB6ApplicationFilePath);processInfo。UseShellExecute=trueprocessInfo.WindwoStyle=ProcessWindowStyle.Hidden;Process.Start(processInfo);将程序环境的副本传递给它启动的程序。因为是副本,所以第二个程序只能看到它所处的状态(并使更改为)。没有其他程序可以更改另一个程序的环境。当您使用ShellExecute(您告诉ProcessStart)时,您要求资源管理器为您启动该程序。该程序获取资源管理器环境的副本。更改系统环境时,程序可以向所有打开的窗口发送一条消息,告知环境已更改(就像setx一样-请参阅setx/?)。但只有Explorer.exe会注意此消息。因此,只有在资源管理器启动后收到此消息的程序才能看到更改。这些是.NET调用的API调用。在Windows中,所有程序都由CreateProcessEx(或旧程序CreateProcess)启动。Shellexecute和ShellexecuteEx处理命令就像您在资源管理器的开始-运行对话框(Winkey+R)中键入它一样,然后更改它并调用CreateProcessEx。在命令提示符下。键入setMyCat=PewResearchcmd/kecho%MyCat%我们设置一个环境变量并启动一个打印该变量的新命令提示符。这是通知WM_SETTINGCHANGE的消息当SystemParametersInfo函数更改了系统范围的设置或策略设置已更改时,系统会向所有顶级窗口发送WM_SETTINGCHANGE消息。当系统参数更改时,应用程序应将WM_SETTINGCHANGE发送到所有顶级窗口。(此消息不能直接发送到窗口。)要将WM_SETTINGCHANGE消息发送到所有顶级窗口,请使用将hwnd参数设置为HWND_BROADCAST的SendMessageTimeout函数。以上就是C#学习教程分享的全部内容:控制台应用程序启动另一个无法访问的进程环。代表立场,如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
