1

我有一个应用程序,用 vb6 编程,需要在 windows 7 中安装一些 dll 文件和 ocx 文件。

我已经有一个使用innosetup创建的安装程序,其中包括所有需要的文件,还安装了mysql Connector-ODBC for Windows (x86, 64-bit)

如果我只是将所有文件放在一个文件夹中,安装不起作用,我会收到错误消息

组件 MSDATGRD.OCX 或其依赖项之一未正确注册:文件丢失或无效

我尝试搜索msdatgrd.ocx 便携应用,但没有任何想法

有没有一种简单的解决方法可以让这个应用程序在没有安装的情况下运行?

您可以在此处下载我要打包到 PortableApp 中的文件。


我尝试使用dependency walker打开 Setup.exe ,但不幸的是我没有足够的专业知识来使用该工具。这里是截图

尽管dependency walker 的输出似乎具有欺骗性,但请参见此处:

Win 7、64位、dll问题

无论如何:我在这里下载了这 9 个文件并将它们打包,现在它显示更多其他文件丢失:pastebin.com/8LawEbuk 7 这似乎不会导致任何地方导致依赖项步行器太旧


我正在寻找一些非常容易创建的东西,无论最终文件大小如何,因为我不是 Windows 程序员

4

2 回答 2

1

下面的错误:

组件 MSDATGRD.OCX 或其依赖项之一未正确注册:文件丢失或无效

可能是因为你还没有注册 ocx 组件。如果你是手动分发这个组件,那么你还需要在用户的机器上注册它。为此,您发出以下命令:

regsvr32 msdatgrd.ocx从命令行(请注意,您需要具有管理员权限)。

如果您不想将应用程序安装在典型的应用程序目录(即:C:\Program Files)中,您可以使用 %APPDATA% 或 %LOCALAPPDATA% 变量来获取 Romaming(如果在网络上)和本地用户的应用程序目录,分别。您也可以使用 Windows API 来执行此操作。例如:

if (SUCCEEDED(SHGetFolderPath(NULL, CSIDL_COMMON_APPDATA, NULL, 0, szPathName)))
{
    PathAppend(szPathNam, _L"\\YourCompany\\YourProduct\\") );
}

除了 .ocx(这是一个实现特定接口的 Dll)之外,您应该注意,如果您使用您在 setup.exe 中编写的 DLL 中的其他方法,那么您必须导出它们。下面的好文章:

http://msdn.microsoft.com/en-us/library/z4zxe9k8.aspx

http://www.codeproject.com/Articles/28969/HowTo-Export-C-classes-from-a-DLL

c++导出和使用dll函数

编辑:

我找到了这个:

无需注册即可使用 OCX

请注意,Windows XP 将于 2014 年 4 月停产!!另请注意,这样做是一种肮脏的黑客行为,应该避免。我不知道在 Windows 7 和 Windows 8 上会发生什么(老实说,你不应该花时间在技巧上,而是改用可移植的 dll 组件)

我还听说过http://boxedapp.com/ 我从未使用过,但值得一看。

于 2013-08-19T11:31:01.073 回答
0

您可以使用Visual Basic 打包和部署向导(PDW) 为您的程序创建标准安装包,然后检查依赖项列表中显示的内容。该软件包需要管理员权限才能安装。

要在没有管理员权限的情况下使用 OCX,您需要检查是否可以通过免注册 COM 激活 ActiveX。您可以从 Windows SDK 通过 mt.exe 生成清单,但 Make My Manifest 对 VB6 项目有更好的支持。您不仅需要隔离网格控件,还需要隔离控件所需的任何 COM 对象。

MSDATGRD.OCX 需要这些文件:msstdfmt.dll 和 Msbind.dll。

于 2013-08-19T06:18:46.427 回答