C# SQL CLR 无法读取环境变量
C# SQL CLR cannot read environment variable
我有一个用 C# 编写的 CLR dll,它的行为很奇怪(对我来说)。我成功地在 SQL 服务器中创建了 permission_set = 不安全的程序集,并创建了 SQL 调用 dll 函数的函数。当我 运行 SQL 服务器中的函数并且它到达查找环境变量的代码部分(系统和我的用户都存在环境变量)时,它的值变为空.但是,如果我采用相同的代码,将其编译为可执行文件,然后在 SQL 服务器(同一台计算机)之外 运行 它可以很好地找到环境变量。如果我删除环境变量部分并将值硬编码到 DLL 中,一切都会按预期工作。注意:代码打开一个带有外部服务的套接字,即使在 SQL 服务器中 运行 时也能够这样做,所以我相当有信心这不是 DLL 的权限问题。相关代码如下:
string propertiesFile = Environment.GetEnvironmentVariable(ENVIRONMENT_VARIABLE_NAME);
我在 Windows 7 机器上使用 SQL Server Express 和 SQL Server Management Studio 版本 12.0.2000.8,我确实尝试重新启动 SQL Server Management创建环境变量后的Studio。
感谢阅读!
感谢artm 指出目标的使用。当我将代码更改为:
string propertiesFile = Environment.GetEnvironmentVariable(ENVIRONMENT_VARIABLE_NAME, EnvironmentVariableTarget.Machine);
一切正常。
我有一个用 C# 编写的 CLR dll,它的行为很奇怪(对我来说)。我成功地在 SQL 服务器中创建了 permission_set = 不安全的程序集,并创建了 SQL 调用 dll 函数的函数。当我 运行 SQL 服务器中的函数并且它到达查找环境变量的代码部分(系统和我的用户都存在环境变量)时,它的值变为空.但是,如果我采用相同的代码,将其编译为可执行文件,然后在 SQL 服务器(同一台计算机)之外 运行 它可以很好地找到环境变量。如果我删除环境变量部分并将值硬编码到 DLL 中,一切都会按预期工作。注意:代码打开一个带有外部服务的套接字,即使在 SQL 服务器中 运行 时也能够这样做,所以我相当有信心这不是 DLL 的权限问题。相关代码如下:
string propertiesFile = Environment.GetEnvironmentVariable(ENVIRONMENT_VARIABLE_NAME);
我在 Windows 7 机器上使用 SQL Server Express 和 SQL Server Management Studio 版本 12.0.2000.8,我确实尝试重新启动 SQL Server Management创建环境变量后的Studio。
感谢阅读!
感谢artm 指出目标的使用。当我将代码更改为:
string propertiesFile = Environment.GetEnvironmentVariable(ENVIRONMENT_VARIABLE_NAME, EnvironmentVariableTarget.Machine);
一切正常。