2016-08-04 25 views
6

我对通过微软的ClickOnce部署在.NET Framework 4.5上运行的C#应用​​程序。我也是利用来自微软SDK一个小工具叫做DComPerm.exe这是我必须单独编译C++应用程序。我的主要应用程序使用Process.Start()来访问此可执行文件。我怎样才能捆绑VC++ 2015年可再发行与我的ClickOnce(.NET)应用程序?

当我第一次尝试在客户机上运行此,我得到了一个错误信息,说明VCRUNTIME140.dll失踪,当应用程序试图调用DComPerm.exe。

VCRUNTIME140.dll missing

这是有道理的......因为该程序是用C++编译它需要在Visual C++ 2015年可再发行组件包,它没有安装在客户机上。我想使这个尽可能无痛,所以我希望我可以用我的ClickOnce应用程序捆绑VC++ 2015年的Redist。在项目属性>发布选项卡中,有前提条件的一个按钮,它可以让我指定应用程序应该捆绑再发行组件包。

Prerequisites on Publish tab

这在理论上听起来不错,但它不工作。现在当我尝试在客户机上安装我的ClickOnce应用程序时,它不起作用。安装失败,并指出我到一个日志文件,其中包含以下相关信息:

“的Visual C++‘14’运行时库(x86)的” RunCheck结果:安装的组件的视觉所需

安装C++“14”运行时库(x86)“被接受。

将文件复制到临时目录 “C:\用户\用户\应用程序数据\本地的\ Temp \ VSD3872.tmp \”

下载文件到“C:\用户\用户\应用程序数据\本地的\ Temp \ VSD3872的.tmp \”

(2016年8月4日下午12点57分48秒)从下载 'http://go.microsoft.com/fwlink/?LinkID=800028&clcid=0x409' 'vcredist_x86 \选择vcredist_x64.exe' 到“C:\用户\用户\应用程序数据\本地\ TEMP \ VSD3872。 TMP \”

下载在2016年8月4日下午12时57分49秒

完成下载失败,HRESULT = -2146697208

而这个消息使得它很清楚问题是什么:the link,它试图用来下载redist包是死的。只...我不知道我怎么能告诉它找到正确的链接。我很惊讶,它无法自动找到它,因为这看起来像一个Visual Studio的错误。一些搜索显示正确的链接实际上是this one,但这不是ClickOnce正在解决的问题。我也看到,旁边的框,这是相应的XML更新我的csproj文件:

<BootstrapperPackage Include="Microsoft.Visual.C++.14.0.x86"> 
    <Visible>False</Visible> 
    <ProductName>Visual C++ "14" Runtime Libraries %28x86%29</ProductName> 
    <Install>true</Install> 
</BootstrapperPackage> 

有没有我可以用它来明确指定位置的一些XML标签?或者我该如何解决这个问题?如何在不中断我的应用程序的情况下捆绑可再发行组件?

+3

'因为该程序是用C++编译的,所以只有链接到CRT DLL时,它才需要Visual C++ 2015 Redistributable package'。为什么不静态连接CRT,而是('/ MT',参见[CRT Library Features](https://msdn.microsoft.com/zh-cn/library/abx4dbyh.aspx))? – dxiv

+0

@dxiv你在这里说的话听起来很有希望,但我并不真正了解它。你是否说可以将DLL构建到可执行文件中,从而否定单独的可再发行组件的需求? – SoaperGEM

+0

随着CRT静态链接,程序将不依赖于'VCRUNTIME' DLL。例如[请参阅如何使用Visual Studio Express 2005完全静态链接.exe](http://stackoverflow.com/questions/37398/how-do-i-make-a-fully-statically-linked- exe-with-visual-studio-express-2005)(对于VS 2015,它的工作原理是一样的)。 – dxiv

回答

4

我有几乎完全相同的问题。您询问如何指定ClickOnce解析的下载位置。为了做到这一点,开放

C:\Program Files (x86)\Microsoft Visual Studio 14.0\SDK\Bootstrapper\Packages\vcredist_x86\en\package.xml 

和编辑Name="https://go.microsoft.com/fwlink/..."正确的URL的属性。顺便说一句,感谢您找到正确的下载链接,我直到看到这篇文章才找到它。

执行此操作后,VC++ Redis在客户端的计算机上正确安装。

+1

感谢您的帮助!仅供参考,以下是[x64版本](https://go.microsoft.com/fwlink/?LinkId=615460)的链接。 – SoaperGEM

相关问题