Как установить драйвер ODBC с помощью C # во время установки приложения? - PullRequest
2 голосов
/ 12 июля 2011

Я делаю заявку, используя c # .net. Приложение использует драйвер PostgrSQL ODBC и, следовательно, должно проверить, был ли драйвер уже установлен на компьютере пользователя. Если нет, то драйвер ODBC должен быть установлен во время процесса установки моих приложений. DSN также должен быть настроен во время установки.

Поэтому у меня вопрос, есть ли способ сначала проверить драйвер во время установки, и, если его там нет, можно ли установить программу автоматической установки драйвера и настройки DSN?

Я использую Microsoft Visual Studio 2010, но не вижу, как включить в мастер публикации другую настройку. Я также изо всех сил пытаюсь найти любую полезную информацию о Google или stackoverflow.

С уважением Питер

Ответы [ 2 ]

5 голосов
/ 19 июля 2011

Я нашел хороший пример для первой части моего вопроса на этом сайте .

Что касается второй части, «Как настроить DSN», я обнаружил еще один фрагмент кода , который требовал лишь небольшой настройки.

    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");
    }
0 голосов
/ 12 июля 2011

Пожалуйста, смотрите Создание пакетов Bootstrapper

...