我使用以下代码从C#代码创建odbc:
string ODBC_PATH = "SOFTWARE\\ODBC\\ODBC.INI\\";
string driverName = "SQL Server";
string dsnName = "DSNName";
string database = "DBName";
string description = "Description";
string server = "Server";
bool trustedConnection = false;
string driverPath = "C:\\WINDOWS\\System32\\sqlsrv32.dll";
var datasourcesKey = Registry.LocalMachine.CreateSubKey(ODBC_PATH + "ODBC Data Sources");
if (datasourcesKey == null)
{
throw new Exception("ODBC Registry key does not exist");
}
datasourcesKey.SetValue(dsnName, driverName);
var dsnKey = Registry.LocalMachine.CreateSubKey(ODBC_PATH + dsnName);
if (dsnKey == null)
{
throw new Exception("DSN was not created");
}
dsnKey.SetValue("Database", database);
dsnKey.SetValue("Description", description);
dsnKey.SetValue("Driver", driverPath);
dsnKey.SetValue("LastUser", "sa");
dsnKey.SetValue("Server", server);
dsnKey.SetValue("Database", database);
dsnKey.SetValue("username", "sa");
dsnKey.SetValue("password", "sa");
dsnKey.SetValue("Trusted_Connection", trustedConnection ? "Yes" : "No");
但是上面的代码创建“系统DNS”。我想在不需要管理员许可的情况下创建“用户DNS”。
答案 0 :(得分:1)
您需要执行一些步骤:
UAC
UAC
清单Run as Administrator
)启动您的应用基于MSDN :
VisualStudio®提供了将XML应用程序清单文件自动嵌入可移植可执行(PE)图像的资源部分的功能。本节介绍如何使用Visual Studio创建包含应用程序清单的签名的PE映像。因此,此应用程序清单可以包含必要的requestedExecutionLevel属性,从而允许该应用程序在Windows Vista上以所需的特权级别运行。启动程序时,将从PE的资源部分提取应用程序清单信息,并由操作系统使用。不必使用Visual Studio图形用户界面(GUI)来包含清单。一旦在源代码中进行了必要的更改,使用命令行工具进行的编译和链接也将在生成的PE映像中包括应用程序清单。
清单文件 要使用requestedExecutionLevel标记您的应用程序,请首先创建一个应用程序清单文件以与目标应用程序一起使用。可以使用任何文本编辑器来创建此文件。应用程序清单文件的名称应与目标可执行文件的名称相同,扩展名为.manifest。 例如:
IsUserAdmin.exe.manifest
示例:
Executable: IsUserAdmin.exe
Manifest:IsUserAdmin.exe.manifest
Sample application manifest file:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="1.0.0.0"
processorArchitecture="X86"
name="IsUserAdmin"
type="win32"/>
<description>Description of your application</description>
<!-- Identify the application security requirements. -->
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges>
<requestedExecutionLevel
level="requireAdministrator"
uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>