2016-08-04 4 views
6

Ich habe eine C# -Anwendung, die auf dem .NET Framework 4.5 ausgeführt wird, das über Microsoft ClickOnce bereitgestellt wird. Ich verwende auch ein kleines Dienstprogramm von einem Microsoft SDK namens DComPerm.exe, das eine C++ - Anwendung ist, die ich separat kompilieren musste. Meine Hauptanwendung verwendet , um auf diese ausführbare Datei zuzugreifen.Wie kann ich die verteilbare Version von VC++ 2015 mit meiner ClickOnce (.NET) -Anwendung bündeln?

Als ich zum ersten Mal versucht habe, dies auf einem Client-Rechner auszuführen, habe ich eine Fehlermeldung erhalten, dass VCRUNTIME140.dll fehlte, als die Anwendung versuchte, DComPerm.exe aufzurufen.

VCRUNTIME140.dll missing

Dieser Sinn macht ... denn das Programm in C++ kompiliert wurde braucht es das Visual C++ 2015 Redistributable-Paket, das auf dem Client-Rechner installiert worden war. Ich möchte dies so schmerzlos wie möglich machen, also hoffte ich, dass ich die VC++ 2015 Redist mit meiner ClickOnce-Anwendung bündeln könnte. Auf der Registerkarte Projekteigenschaften> Veröffentlichen gibt es eine Schaltfläche für Voraussetzungen, mit der Sie festlegen können, dass die Anwendung das weiterverteilbare Paket bündeln soll.

Prerequisites on Publish tab

Die in der Theorie gut klingt, aber es funktioniert nicht. Wenn ich versuche, meine ClickOnce-Anwendung auf dem Clientcomputer zu installieren, funktioniert es nicht. Die Installation schlägt fehl, und weist mich in eine Protokolldatei, die die folgenden relevanten Informationen enthält:

'Visual C++ "14" Laufzeitbibliotheken (x86)' RunCheck Ergebnis: Benötigte Installieren

Installation der Komponenten ‚Visuelle C++ "14" Laufzeitbibliotheken (x86) 'wurde akzeptiert.

Kopieren von Dateien auf temporäres Verzeichnis "C: \ Benutzer \ Besitzer \ AppData \ Local \ Temp \ VSD3872.tmp \"

Herunterladen von Dateien auf „C: \ Benutzer \ Besitzer \ AppData \ Local \ Temp \ VSD3872 tmp \“

(8/4/2016 12:57:48 PM) 'vcredist_x86 \ vcredist_x86.exe' von 'http://go.microsoft.com/fwlink/?LinkID=800028&clcid=0x409' auf‚C Herunterladen: \ Users Besitzer \ AppData \ Local \ Temp \ VSD3872 \. tmp \‘

Download completed bei 2016.08.04 12.57.49

Downloading mit HRESULT fehlgeschlagen = -2146697208

Und diese Botschaft macht es ziemlich klar, was das Problem ist: the link, dass es das redist Paket ist tot zu verwenden versucht, zum Download bereit. Nur ... Ich bin nicht sicher, wie ich es sagen kann, um den richtigen Link zu finden. Ich bin ziemlich überrascht, dass es nicht automatisch gefunden werden kann, da dies wie ein Fehler in Visual Studio aussieht. Einige Suche ergab, dass der richtige Link tatsächlich this one ist, aber das ist nicht, was ClickOnce löst. Ich sah auch, dass die Box durch Überprüfung dieser das entsprechende XML-Update zu meiner csproj Datei war:

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

Gibt es einen XML-Tag kann ich verwende die Position explizit angeben? Oder wie kann ich das sonst reparieren? Wie kann ich das Redistributable bündeln, ohne meine Anwendung zu unterbrechen?

+3

'da das Programm in C++ kompiliert wurde, benötigt es das Visual C++ 2015 Redistributable-Paket' Nur wenn Sie auf die CRT-DLLs verlinken. Warum verbinden Sie den CRT nicht statisch, stattdessen ('/ MT', siehe [CRT Library Features] (https://msdn.microsoft.com/en-us/library/abx4dbyh.aspx))? – dxiv

+0

@dxiv, was du hier sagst klingt vielversprechend, aber ich verstehe es nicht wirklich. Wollen Sie sagen, dass es möglich ist, die DLL im Wesentlichen in die ausführbare Datei selbst zu schreiben, wodurch die Notwendigkeit für eine separate Weiterverbreitung negiert wird? – SoaperGEM

+0

Wenn der CRT statisch verbunden ist, hängt das Programm nicht von den 'VCRUNTIME' DLLs ab. Siehe zum Beispiel [Wie mache ich eine vollständig statisch verknüpfte .exe mit Visual Studio Express 2005?] (Http://stackoverflow.com/questions/37398/how-do-i-make-a-fully-statically-linked- exe-with-Visual-Studio-Express-2005) (es funktioniert das gleiche für VS 2015). – dxiv

Antwort

4

Ich hatte ziemlich genau das gleiche Problem. Sie haben gefragt, wie Sie den Download-Speicherort angeben, den ClickOnce löst.Um das zu tun, offen

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

und das Attribut mit Name="https://go.microsoft.com/fwlink/..." auf die richtige URL bearbeiten. Übrigens, ich danke Ihnen, dass Sie den richtigen Download-Link gefunden haben, bis ich diesen Beitrag gesehen habe.

Die VC++ Redis wird nach dem Ausführen auf dem Clientcomputer korrekt installiert.

+1

Danke für Ihre Hilfe! Und nur als Referenz, hier ist der Link zur [x64-Version] (https://go.microsoft.com/fwlink/?LinkId=615460). – SoaperGEM

Verwandte Themen