【问题标题】:How do I install an ODBC driver using C# during my apllication setup?如何在我的应用程序设置期间使用 C# 安装 ODBC 驱动程序?
【发布时间】:2011-07-12 13:08:54
【问题描述】:

我正在使用 c#.net 制作应用程序。该应用程序依赖于 PostgrSQL ODBC 驱动程序,因此必须检查该驱动程序是否已安装在用户的计算机上。如果不是,则必须在我的应用程序自己的安装过程中安装 ODBC 驱动程序。 DSN 还必须在设置期间进行配置。

因此,我的问题是,有没有办法在安装过程中首先检查驱动程序,如果没有,是否可以将安装程序设置为自动安装驱动程序并配置 DSN?

我使用的是 Microsoft Visual Studio 2010,但看不到如何在发布向导中包含其他设置。我也在努力在 Google 或 stackoverflow 上找到任何有用的信息。

问候 彼得

【问题讨论】:

    标签: c# .net odbc driver dsn


    【解决方案1】:

    我在this website 上为我的问题的第一部分找到了一个很好的例子。

    至于第二部分,“如何配置DSN”,我找到了另一个code snippet,只需要一些调整。

        private const string ODBC_INI_REG_PATH = "SOFTWARE\\ODBC\\ODBC.INI\\";
        private const string ODBCINST_INI_REG_PATH = "SOFTWARE\\ODBC\\ODBCINST.INI\\";
    
        /// <summary>
        /// Creates a new System-DSN entry with the specified values. If the DSN exists, the values are updated.
        /// </summary>
        /// <param name="dsnName">Name of the DSN for use by client applications</param>
        /// <param name="description">Description of the DSN that appears in the ODBC control panel applet</param>
        /// <param name="server">Network name or IP address of database server</param>
        /// <param name="driverName">Name of the driver to use</param>
        /// <param name="trustedConnection">True to use NT authentication, false to require applications to supply username/password in the connection string</param>
        /// <param name="database">Name of the datbase to connect to</param>
        public static void CreateDSN2(string dsnName, string description, string server, string driverName, bool trustedConnection, string database, string user, string password, string port)
        {
            // Lookup driver path from driver name
            var driverKey = Registry.LocalMachine.CreateSubKey(ODBCINST_INI_REG_PATH + driverName);
            if (driverKey == null) throw new Exception(string.Format("ODBC Registry key for driver '{0}' does not exist", driverName));
            string driverPath = driverKey.GetValue("Driver").ToString();
    
            // Add value to odbc data sources
            var datasourcesKey = Registry.LocalMachine.CreateSubKey(ODBC_INI_REG_PATH + "ODBC Data Sources");
            if (datasourcesKey == null) throw new Exception("ODBC Registry key for datasources does not exist");
            datasourcesKey.SetValue(dsnName, driverName);
    
            // Create new key in odbc.ini with dsn name and add values
            var dsnKey = Registry.LocalMachine.CreateSubKey(ODBC_INI_REG_PATH + dsnName);
            //MessageBox.Show(dsnKey.ToString());
            if (dsnKey == null) throw new Exception("ODBC Registry key for DSN was not created");
            dsnKey.SetValue("Data Source", dsnName);
            dsnKey.SetValue("Database", database);
            dsnKey.SetValue("Description", description);
            dsnKey.SetValue("Driver", driverPath);
            dsnKey.SetValue("Server", server);
            dsnKey.SetValue("User name", user);
            dsnKey.SetValue("Password", password);
            dsnKey.SetValue("Port", port);
            dsnKey.SetValue("Trusted_Connection", trustedConnection ? "Yes" : "No");
        }
    

    【讨论】:

      【解决方案2】:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-12-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-28
        • 1970-01-01
        • 2018-04-19
        相关资源
        最近更新 更多