2016-04-22 15 views
5

pomocą programu Visual Studio 2015, z 2015 zestaw narzędzi: gdy próbuję bezpośrednio podpisania montaż następująco:Nie można podpisać C++/montaż CLI w Visual Studio 2015

Signing a C++/CLI assembly

Podpisanie zawsze kończy się niepowodzeniem z następujących błąd: LNK1346 ALINK operation failed (80040436) : Error signing assembly -- The process cannot access the file because it is being used by another process.

Ten sam zestaw mógł zostać podpisany w Visual Studio 2013 (właśnie go zaktualizowałem).

Czy jest to znany problem w 2015 r. (Czy nie mogłem znaleźć żadnych błędów podczas wyszukiwania tego błędu)? Czy robię coś złego?

EDIT: Obejście

Wydaje się, że jest to kolejny McAfee AV bug. Istnieje jednak inny sposób podpisania pliku, który może dać McVirusowi wystarczająco dużo czasu na zwolnienie zablokowanej blokady.

Zespół może być opóźniony w podpisaniu, a sn -R $(TargetPath) $(LinkKeyFile) może zostać uruchomiony jako zdarzenie budowania postu, aby dokończyć proces podpisywania. To zadziałało dla mnie i @Moopa.

+0

Wygląda na to, że ktoś ma uchwyt do pliku. Zakładam inne narzędzie w VS. Najlepszym sposobem na rozpoczęcie jest określenie "kto" ma uchwyt. Sprawdź procexp.exe i zobacz, czy jakikolwiek inny proces ma otwarty uchwyt do pliku, który próbujesz podpisać. – linuxuser27

+0

Twoje obejście problemu zadziałało, może być użyteczne, aby znaleźć odpowiedź na to pytanie. Również makro $ (LinkKeyFile) wydaje się działać: sn -R $ (TargetPath) $ (LinkKeyFile) – Moop

+0

@Moop - dzięki, zaktualizowałem pytanie, aby dodać nacisk na obejście tego problemu. – briantyler

Odpowiedz

4

The process cannot access the file because it is being used by another process.

Działa dobrze na moim komputerze, to nie jest problem z VS2015. Jest to typowy problem środowiskowy. Ten komunikat o błędzie jest standardową tragedią na komputerach z systemem Windows, które są zainfekowane złośliwym oprogramowaniem pakowanym w folię termokurczliwą.

Podpisywanie jest procesem dwuetapowym. Pierwszy link.exe musi wygenerować plik wykonywalny, konieczny, aby można było obliczyć wartość skrótu SHA256 dla pliku. Następnie plik zostanie ponownie otwarty przez ALINK (zarządzany linker), aby dodać podpis. Musi walczyć z innymi procesami, które działają na twoim komputerze, które również są zainteresowane tym plikiem. Ten rodzaj, który niezmiennie dostaje swoją bieliznę w pakiecie, gdy plik wykonywalny pojawia się z pozoru nigdzie i nalega na sprawdzenie zawartości pliku i wykluczenie dostępu do pliku, dopóki nie zostanie zrobione.

Wygląda na to, że działa dobrze, gdy używasz podpisywania z opóĽnieniem, opóźnienie zwykle wystarcza, aby proces zakończył pracę i zwolnił wyłączny blokadę pliku. Również niektóre kursy, które sn.exe jest nieco bardziej wyrafinowany, próbując otworzyć plik okresowo przed rezygnacją, ALINK na pewno nie jest.

Musisz dokonać wykluczenia w swoim programie antywirusowym dla swojego katalogu kompilacji. Jeśli jest to agresywne oprogramowanie typu freeware, takie jak Avast, AVG lub ESET, planuj pozbyć się go tak szybko, aby już nigdy ci nie przeszkadzało. Obrońca nigdy nie sprawia mi kłopotów.

+0

Dzięki, to brzmi dobrze. Mamy McVirusa (Afee) na naszych maszynach i ma wiele rzeczy. Postaram się później potwierdzić na moim laptopie odpowiednio agresywnego zabójcę procesowego. Co mnie martwi, dlaczego to działa dobrze w 2013 roku, ale nie w 2015 roku? Czy nastąpiły znaczące zmiany w link.exe i ALINK? – briantyler

+0

Nigdy nie można uzyskać diagnostyki, powiedzmy, zmiany w * pojedynczym bajcie *, która teraz sprawia, że ​​pasuje do wirusowego podpisu, który sprawia, że ​​skaner wygląda dokładniej. –

+0

Czy istnieje sposób monitorowania blokad podjętych w pliku? Procexp tak naprawdę nie działa w przypadku blokad, które są podejmowane przez krótki okres czasu, więc nie jest możliwe zobaczenie, co blokuje plik, a Monitor zasobów prawdopodobnie bierze ogólnosystemowe migawki, co oznacza, że ​​nie daje wystarczająco dokładnego obrazu. – briantyler

Powiązane problemy