使用 installshield 创建安装文件时 Windows 窗体的 Microsoft Access 数据库的位置

Posted

技术标签:

【中文标题】使用 installshield 创建安装文件时 Windows 窗体的 Microsoft Access 数据库的位置【英文标题】:Location of Microsoft access database for windows form when creating setup file using installshield 【发布时间】:2013-02-01 22:56:11 【问题描述】:

我开发了使用 Microsoft Access 数据库的 windows 窗体。

在开发过程中,我将数据库文件放在项目的根文件夹中。

当我通过 Visual Studio 运行应用程序时,它运行良好,但是当我创建安装文件并将其安装到我的系统中时,出现以下错误。

当我创建安装文件时,我的数据库位置是

Data Source=|DataDirectory|\Database.accdb

我该如何解决这个问题?

错误

See the end of this message for details on invoking 
just-in-time (JIT) debugging instead of this dialog box.

************** Exception Text **************
System.NullReferenceException: Object reference not set to an instance of an object.
   at Purchase_Management.Form1..ctor() in c:\Users\Amrit\Documents\Visual Studio 2012\Projects\Purchase Management\Purchase Management\Purchase Management System.cs:line 19
   at Purchase_Management.Main_Window.button1_Click(Object sender, EventArgs e) in c:\Users\Amrit\Documents\Visual Studio 2012\Projects\Purchase Management\Purchase Management\Main Window.cs:line 27
   at System.Windows.Forms.Control.OnClick(EventArgs e)
   at System.Windows.Forms.Button.OnClick(EventArgs e)
   at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
   at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
   at System.Windows.Forms.Control.WndProc(Message& m)
   at System.Windows.Forms.ButtonBase.WndProc(Message& m)
   at System.Windows.Forms.Button.WndProc(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)


************** Loaded Assemblies **************
mscorlib
    Assembly Version: 4.0.0.0
    Win32 Version: 4.0.30319.18033 built by: FX45RTMGDR
    CodeBase: file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll
----------------------------------------
Purchase Management
    Assembly Version: 1.0.0.0
    Win32 Version: 1.0.0.0
    CodeBase: file:///C:/Program%20Files%20(x86)/Amrit%20Creations/aDesigns/Purchase%20Management/obj/Release/Purchase%20Management.exe
----------------------------------------
System.Windows.Forms
    Assembly Version: 4.0.0.0
    Win32 Version: 4.0.30319.18037 built by: FX45RTMGDR
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System.Drawing
    Assembly Version: 4.0.0.0
    Win32 Version: 4.0.30319.18022 built by: FX45RTMGDR
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
System
    Assembly Version: 4.0.0.0
    Win32 Version: 4.0.30319.18033 built by: FX45RTMGDR
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
System.Configuration
    Assembly Version: 4.0.0.0
    Win32 Version: 4.0.30319.17929 built by: FX45RTMREL
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
----------------------------------------
System.Xml
    Assembly Version: 4.0.0.0
    Win32 Version: 4.0.30319.18033 built by: FX45RTMGDR
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll
----------------------------------------

************** JIT Debugging **************
To enable just-in-time (JIT) debugging, the .config file for this
application or computer (machine.config) must have the
jitDebugging value set in the system.windows.forms section.
The application must also be compiled with debugging
enabled.

For example:

<configuration>
    <system.windows.forms jitDebugging="true" />
</configuration>

When JIT debugging is enabled, any unhandled exception
will be sent to the JIT debugger registered on the computer
rather than be handled by this dialog box.

【问题讨论】:

你检查过安装位置是否存在数据库吗? 我在安装后检查了位置,它确实存在。 【参考方案1】:

我想,错误与connectionString 或您的数据库无关,我说,因为如果该错误与database path 有关,它应该像这张图片

如果该错误类似于该图像。尝试将您的数据库和应用程序放在同一个文件夹中。

好吧我发现了,你明显把数据库放错地方了..试着把那个数据库移到bin文件夹里

【讨论】:

是同样的错误..我的第一个窗口打开得很好,但是当我尝试打开第二个窗口时,它上面有组合框,它从数据库中填充项目。所以我认为它不知道从哪里获取数据并抛出错误..但是我从 Visual Studio 调试应用程序它运行良好.. 所以我必须更改 app.config 中的连接字符串还是将数据库移动到 \Resources\App_Data\Database.accdb 如果数据库和您的应用程序在同一个文件夹中。 connectionString 应该是这样的 Provider=MICROSOFT.ACE.OLEDB.12.0; Data Source=|DataDirectory|/database.accdb 那很奇怪..:D 它与数据库链接有关,但我不知道我错在哪里。所有其他不需要数据库的窗口都可以正常工作..

以上是关于使用 installshield 创建安装文件时 Windows 窗体的 Microsoft Access 数据库的位置的主要内容,如果未能解决你的问题,请参考以下文章

Wix - 如何创建一个临时文件以在安装期间使用

使用 WiX 为 InstallShield 安装程序创建 msi 包装器

installshield的使用

InstallShield程序打包图解

使用 installshield 和 msi 时版本号都有哪些限制

VS2013 生成安装文件