C#在没有管理员许可的情况下创建用户ODBC

时间:2018-10-21 09:31:32

标签: c# .net dns odbc

我使用以下代码从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”。

1 个答案:

答案 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>