2

c#.net を使用してアプリケーションを作成しています。アプリケーションは PostgrSQL ODBC ドライバーに依存しているため、ユーザーのコンピューターにドライバーが既にインストールされているかどうかを確認する必要があります。そうでない場合は、アプリケーション独自のインストール プロセス中に ODBC ドライバーをインストールする必要があります。セットアップ中に DSN も構成する必要があります。

したがって、私の質問は、セットアップ中に最初にドライバーを確認する方法はありますか?存在しない場合、ドライバーを自動的にインストールして DSN を構成するようにセットアップを設定できますか?

Microsoft Visual Studio 2010 を使用していますが、発行ウィザードに別の設定を含める方法がわかりません。また、Google やスタックオーバーフローで役立つ情報を見つけるのに苦労しています。

よろしくピーター

4

2 に答える 2

5

このウェブサイトで、質問の最初の部分の良い例を見つけました。

2 番目の「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");
    }
于 2011-07-19T07:36:24.480 に答える
0

Bootstrapper パッケージの作成を参照してください。

于 2011-07-12T13:14:22.923 に答える