【问题标题】:I want to apply a modification to the path environement system variable without rebooting or restarting the cmd owing to c#由于 c#,我想对路径环境系统变量进行修改,而无需重新启动或重新启动 cmd
【发布时间】:2013-05-02 19:09:09
【问题描述】:

我正在使用一个 C# dll,我正在使用 Installshield 将 Oracle 的路径添加到 Path 环境系统变量中,以便能够连接到 Oracle 数据库,因为即时客户端。

当我第一次运行安装程序时它没有成功,但对路径变量进行了更改。它在第二次尝试时成功,因为路径已经从第一次运行中改变了。 所以结论是Oracle数据库提供者用代码修改后并没有直接查看变化。

我想要一种方法来检测路径变量的更改,而无需再次尝试安装。

var ancientPath = Environment.GetEnvironmentVariable("path", EnvironmentVariableTarget.Machine); 

Environment.SetEnvironmentVariable("path", ancientPath + ";" + tmp, EnvironmentVariableTarget.Machine);

【问题讨论】:

  • var AncientPath = Environment.GetEnvironmentVariable("path", EnvironmentVariableTarget.Machine); Environment.SetEnvironmentVariable("path", AncientPath + ";" + tmp, EnvironmentVariableTarget.Machine);

标签: c# oracle environment-variables installshield


【解决方案1】:

您正在尝试做的事情显然是不可行的。一个进程可以修改它自己的环境,它可以产生具有不同环境的进程,但没有进程可以改变另一个进程的环境。当您在第一次安装后启动新进程时,您应该会看到更新后的路径。

如果您希望现有进程使用新的环境变量,则必须重新启动它。如果您的安装程序由于缺少路径信息而失败,您将不得不解决这个问题。

【讨论】:

  • 我尝试在相同的方法中修改路径变量后创建一个OracleConnection,我想这意味着它在同一个进程中,不是吗?当我记录新路径值时,我发现它发生了变化,但不幸的是 OracleConnection 的新实例失败了,但是当我重新启动整个设置时它通过了,而不仅仅是方法调用。
  • 有没有办法将该更改传播到父进程?
  • 这里的“失败”到底是什么意思?
  • 失败意味着它需要安装一个oracle客户端,通过意味着它不需要安装一个客户端,而是使用一个即时客户端,其dll位于我添加到路径系统变量的路径中。
【解决方案2】:

尝试向所有窗口发送 WM_SETTINGCHANGE 消息,如following MSDN article 中所述。

SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM)“环境”,SMTO_ABORTIFHUNG, 5000, &dwReturnValue);

【讨论】:

    猜你喜欢
    • 2020-12-12
    • 1970-01-01
    • 1970-01-01
    • 2019-03-23
    • 2014-09-05
    • 2015-08-04
    • 2010-11-24
    • 1970-01-01
    相关资源
    最近更新 更多