我一直在Visual Studio 2012中创建一个程序,它带来的是当我将我的应用程序发送给某人时,他们需要VS2012运行时,有时他们不知道下载的地方或他们需要的东西(对于普通用户“xxx.dll缺失”是非常误导的。)
我确切知道我的应用程序需要哪些依赖项(fantom.dll [Lego Mindstorms stuff]和VC ++ 2012 Redist)。
我希望在应用程序启动时缺少这些库时显示一个对话框,并为用户提供这些库的下载链接。
这有可能实现吗?
答案 0 :(得分:1)
不可以,但您可以为您的程序创建安装程序。在程序加载过程中,在代码执行之前抛出错误......
你可以试试:http://www.codeproject.com/Articles/24187/Creating-an-Installer
答案 1 :(得分:1)
我不能动态地测试VS2012运行时,但你当然可以动态验证fantom.dll。您可以动态加载它,而不是直接静态链接到DLL。您可以将项目配置为在运行时延迟加载DLL,然后提供延迟加载回调处理程序,如果延迟加载失败,RTL将调用该处理程序。或者您可以直接通过调用LoadLibrary()
和GetProcAddress()
来跳过延迟加载功能并手动加载DLL。
答案 2 :(得分:1)
是的,你可以这样做:
当然这意味着您的EXE项目不能依赖于运行时本身 - 这不应该是一个问题,因为您只需要调用3个win32 API即可。
答案 3 :(得分:0)
当然,您可以验证部署的系统上是否存在依赖关系。我想到了一些事情......
您可以通过调用AppDomain.AssemblyResolve()
来查看正在运行的系统上是否识别出程序集。 Further reading here
另一个更原始的选择是调用File.Exists(your assembly path here)
测试,但我建议不要这样做,因为要求硬盘安装位置是一种不好的做法。
尽管如此,正如其他人所说的那样,它仍然是到目前为止创建自己的安装发布的最佳方法。