如何创建包含mysql-ODBC,所有DLL和OCX文件的Windows便携式应用程序?

时间:2013-07-16 09:44:03

标签: windows clickonce portable-executable

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

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

如果我只是将所有文件放入一个文件夹中,那么安装就行了,我就会收到错误

  

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

我尝试搜索msdatgrd.ocx portableapp但没有想法

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

您可以将我要打包的文件下载到PortableApp here


我尝试使用依赖性walker 打开Setup.exe,但遗憾的是我没有足够的专业知识来使用该工具。 here a screenshot

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

  

Win 7, 64 bit, dll problems

无论如何:我下载了9个文件herepacked them,现在它显示了更多其他文件丢失:pastebin.com/8LawEbuk 7这个doesent似乎导致任何地方导致依赖性walker太旧


我正在寻找非常简单的创建,无论文件大小到底,因为我不是Windows程序员

2 个答案:

答案 0 :(得分: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++ exporting and using dll function

修改

我发现了这个:

Use OCX without registering it

请注意,Windows XP将于2014年4月发布!另请注意,这样做是一个肮脏的黑客,应该避免。我不知道在Windows 7和Windows 8上发生了什么(老实说,你不应该花时间处理技巧,而是改为便携式dll组件)

我也听说过http://boxedapp.com/ 我从来没用过,但值得一看。

答案 1 :(得分:0)

您可以使用Visual Basic Package and Deployment Wizard(PDW)为您的程序创建Standard Setup Package,然后检查依赖项列表中显示的内容。该程序包将需要管理员权限才能安装。

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

MSDATGRD.OCX需要以下文件:msstdfmt.dll和Msbind.dll。