2013-01-10 10 views
8

W porządku, nie robię czegoś dobrze i potrzebuję pomocy. Oto, co się dzieje:Używanie Authenticode z aplikacją ClickOnce WPF

  1. Mam "prawdziwy" certyfikat Authenticode z Comodo, za który zapłaciłem.
  2. Próbuję podpisać i wdrożyć aplikację WPF napisaną w Visual Studio 2012 i .NET 4.5.
  3. We właściwościach projektu zaznaczyłem "Podaj manifesty ClickOnce" i wybrałem mój certyfikat.
  4. Używam również datownika sever Comodo'S (http://timestamp.comodoca.com/authenticode)
  5. W zakładce Publish i pod przyciskiem przesłanek mam zaznaczone „Utwórz program instalacyjny, aby zainstalować składniki wstępnych”.

Kiedy buduję i publikuję, wszystko działa! Plik setup.exe jest podpisany za pomocą mojego certyfikatu Comodo, więc to dobrze. Ponadto plik .application jest podpisany certyfikatem Comodo, a nazwa mojej firmy jest widoczna jako wydawca - jest to również dobre.

Oto problem: po pobraniu aplikacji do klienta system Windows 8 generuje ostrzeżenie o niezaufanym programie (MyProgram.exe), a wydawca nie jest nazwą mojej firmy. Tak więc wszystko jest podpisane , z wyjątkiem rzeczywistego pliku wykonywalnego.

Próbowałem dodać skrypt post-build, który używa signtool.exe na obj \ Release \ MyProgram.exe, ale gdy próbuję zainstalować aplikację, pojawia się oczywisty błąd stwierdzając, że wartości mieszania nie " t dopasowanie. Innymi słowy, manifest jest generowany przed wydarzeniem następującym po budowaniu.

Jak mogę zarejestrować mój .exe i zachować integralność manifestu ClickOnce? Czy istnieje prosty sposób, aby to zrobić, czy też muszę ręcznie używać mage.exe (mam nadzieję, że nie)?

Odpowiedz

10

Nikt nie wskoczył na to, ale na szczęście udało mi się to rozgryźć!

Dzięki tej kwestii: "File has a different computed hash than specified in manifest" error when signing the EXE

byłem w stanie edytować XML pliku projektu za projekt (rozładować, a następnie wybierz "Edytuj myproject.csproj") i dodał:

<Target Name="SignOutput" AfterTargets="CoreCompile"> 
<PropertyGroup> 
    <TimestampServerUrl>http://timestamp.comodoca.com/authenticode</TimestampServerUrl> 
    <ApplicationDescription>My Project Friendly Name</ApplicationDescription> 
    <SigningCertificateCriteria>/n MyCertName</SigningCertificateCriteria> 
</PropertyGroup> 
<ItemGroup> 
    <SignableFiles Include="$(ProjectDir)obj\$(ConfigurationName)\$(TargetName)$(TargetExt)" /> 
</ItemGroup> 
<GetFrameworkSdkPath> 
    <Output TaskParameter="Path" PropertyName="SdkPath" /> 
</GetFrameworkSdkPath> 
<Exec Command="&quot;$(SdkPath)bin\signtool&quot; sign $(SigningCertificateCriteria) /d &quot;$(ApplicationDescription)&quot; /t &quot;$(TimestampServerUrl)&quot; &quot;%(SignableFiles.Identity)&quot;" /> 

Musiałem przenieść plik signtool.exe do folderu SDK (C: \ Program Files (x86) \ Microsoft SDK \ Windows \ v8.0A \ bin, w moim przypadku), ale potem działało jak czar!

Mam nadzieję, że pomoże to komuś innemu w przyszłości.

+1

Używam tego wydarzenia od lat. Przeszedł do tego problemu, przełączając się na VS2012. Próbowałem tej metody - ale nadal otrzymuję "ma inny obliczony skrót niż podano w manifeście". – tofutim

+1

Scratch that ... Jakoś zapomniałem usunąć stare wywołanie funkcji PostBuild! Dzięki Jason. – tofutim

+0

Wielkie dzięki, Jason, że go przybiłeś! –

Powiązane problemy