2016-02-19 1 views
4

J'ai un projet C# .net dans Visual Studio 2013. J'ai signé avec succès le manifeste dit Visual Studio pour signer également l'assembly.Signe exécutable dans une application clickonce lors de la publication

Toutefois, le fichier d'application exe n'est pas signé. Après googler j'ajouté ce qui suit à l'événement post construction

"C:\Program Files\Microsoft SDKs\Windows\v7.1A\Bin\signtool.exe" sign /f "$(ProjectDir)certificate.pfx" /p mypassword "$(ProjectDir)obj\Debug\myapp.exe" 

et aussi essayé

"C:\Program Files\Microsoft SDKs\Windows\v7.1A\Bin\signtool.exe" sign /f "$(ProjectDir)certificate.pfx" /p mypassword "$(ProjectDir)bin\Debug\myapp.exe" 

Cela semble signer l'exe, mais maintenant mon application ne se lance pas et donne l'erreur:

File, ECG Cloud Holter Assistant.exe, has a different computed hash than specified in manifest.

Donc, je pense que j'ai besoin de signer l'exe avant il génère le manifeste, mais comment puis-je faire?

Si je n'inclue pas la commande post build, l'application fonctionne correctement, mais avec un avertissement d'éditeur inconnu.

+0

Est-ce un projet WPF par hasard? – Ageonix

+0

Le manifeste de signature doit être la dernière étape du processus de construction. Dans votre cas, vous modifiez le fichier exe après avoir signé le manifeste. –

+0

Ageonix - c'est une application winform. –

Répondre

4

Essayez de donner un coup de main:
1. Cliquez avec le bouton droit sur le projet winforms et sélectionnez «Décharger le projet».
2. Cliquez avec le bouton droit de la souris sur le projet et sélectionnez "Modifier (votre nom de projet) .csproj".
3. Allez au fond du fichier et ajoutez la section suivante avant la balise « projet » de fermeture:

<Target Name="AfterCompile"> 
    <Exec Command="C:\Program Files\Microsoft SDKs\Windows\v7.1A\Bin\signtool.exe" sign /f "$(ProjectDir)certificate.pfx" /p mypassword "$(ProjectDir)obj\Debug\myapp.exe" /> 
</Target> 

4. Enregistrez le fichier proj et fermez-le.
5. Cliquez avec le bouton droit de la souris sur le projet et rechargez-le.

Maintenant, si vous construisez votre projet, vous ne verrez rien sur la signature de l'exécutable de l'application dans la fenêtre de sortie. Il ne le fera que si vous publiez, et il n'y aura pas de journalisation vous laissant savoir qu'il l'a signé. Comment savez-vous si cela a fonctionné? Accédez au dossier que vous avez publié et recherchez dans le dossier Application Files. Localisez l'exécutable de l'application dans le dossier de la nouvelle version. Faites un clic droit dessus, choisissez les propriétés. Recherchez un onglet appelé "Signatures numériques". Si ce n'est pas trouvé, ce n'est pas signé. Si vous le voyez, allez dans cet onglet; il montrera la liste de signature et le signataire du certificat. Vous pouvez double-cliquer sur le signataire, puis afficher le certificat de signature.

J'ai eu un problème similaire et a été en mesure de le comprendre avec l'aide de ce blog: https://robindotnet.wordpress.com/2013/02/24/windows-8-and-clickonce-the-definitive-answer-2/

+0

Merci, ça a bien fonctionné. La principale chose à retenir est 'AfterCompile' - 'BeforePublish' tel qu'utilisé dans l'article robindotnet n'a pas fonctionné pour moi. –

+0

'Command' est un attribut de la balise' Exec'. Donc, sa valeur devrait être entre guillemets. Mais la double citation après signtool.exe n'est-elle pas destinée à indiquer le chemin (car elle contient des espaces)? si c'est correct, c'est une convention de syntaxe bizarre. J'ai utilisé des guillemets simples pour l'attribut, et des guillemets doubles juste pour être sûr. – dlatikay