Się powymądrzam. Może się przyda.
Kopiowanie dll,exe,cpl -> mui, a potem edycja ma wadę. w MUI siedzi oryginalny kod. Niepotrzebny, a zajmuje miejsce.
Jeśli plik był podpisany, potem edytowany (czyli z punktu widzenia podpisu - uszkodzony), a potem uszkodzona całość została jeszcze raz podpisana, to wychodzi chimera (trochę certyfikowany, trochę uszkodzony). Top level podpis jest ok, ale to co pod spodem to trochę marne. (BTW. Nie znalazłem niczego, co by usuwało podpis. Mam kawałek algorytmu, tylko nie mam czasu usiąść i napisać). poza tym: nieważny podpis (ten z uszkodzonego oryginału) zajmuje trochę miejsca. Tak z kilobajt chyba.
Edycja zasobów narzędziami wizualnymi zazwyczaj powoduje drobne, niezamierzone i niejawne modyfikacje. W szczególności: resHacker dodaje jakieś dziwne flagi do dialogów (a potem się zdarza, że sam ich nie rozumie :), visual studio dodaje informacje o fontach, której nie było w oryginale (na siłę wkłada tahomę, nawet jeśli autor nie chciał tego), inne pewnie też coś robią. Najlepszym testem jest próba zmodyfikowania tapres.dll (czyli zasoby od telefonu) - w zasadzie każde narzędzie spieprzy layout.
Na swoje potrzeby znalazłem taką metodę do generowania MUI na podstawie pliku:
otworzyc (Open) plik exe, dll albo cpl w visual studio.
Zapisać jako (Save as) plik zasobów .RC (dla każdego obrabianego pliku warto stworzyć nowy katalog, bo się popieprzy - konflikt nazw)
Edytować plik RC jakms dobrym edytorem tekstowym (bo to jest plik tekstowy)
skompilować i zlinkować.
W załączniku jest cały skrypt (plik .BTM - taki .BAT dla shella JPsoftware 4NT), przykładowy COMMCTRL.RC i wyjściowy COMMCTRL.dll.0415.mui
Kluczowe są dwie linie skryptu (tu z przykładowym COMMCTRL):
rc.exe /i "C:\Program Files\Visual Studio\VC\ce\atlmfc\include" /i "C:\Program Files\Visual Studio\VC\ce\atlmfc\include" /i "C:\Program Files\Visual Studio\VC\PlatformSDK\Include" /n /l 0x0415 /fo "COMMCTRL.res" "COMMCTRL.RC"
link -nologo -dll -noentry -out:"COMMCTRL.dll.0415.mui" "COMMCTRL.res" /MACHINE:ARM
Coś takiego powinno być małe (tylko zasoby) i zdatne do podpisania (bo nie ma żadnego podpisu)
Jak się komuś przyda, to fajnie :)
--------
Załącznika nie przyjęło.
To tu wkopiuję sam makeMUI.btm.
@echo off
*setLocal
unAlias *
set path=C:\Program Files\misc;C:\Program Files\Visual Studio\VC\bin;C:\Program Files\Visual Studio\Common7\IDE;%path%
set lang=0415
Iff %# == 0 Then
For aFName in (*.rc) GoSub compile %aFName
Else
For aFName in (%$) GoSub compile %aFName
EndIff
quit
:----------------------------------------
:compile [aFName]
set trueName=%@trueName[%aFName]
echo Compiling %trueName
set aPath=%@Path[%trueName]
set aName=%@Name[%trueName]
set aExt=%@path[%trueName]
set outRes=%aPath%%aName%.res
set isDll=dll
if %@upper[%@right[5,%aPath]] == .EXE\ set isDll=exe
set outDll=%aPath%%aName%.%isDll.%lang.mui
del /q "%outDll" >&> nul:
rc.exe /i "C:\Program Files\Visual Studio\VC\ce\atlmfc\include" /i "C:\Program Files\Visual Studio\VC\ce\atlmfc\include" /i "C:\Program Files\Visual Studio\VC\PlatformSDK\Include" /n /l 0x%lang /fo "%outRes" "%trueName"
link -nologo -dll -noentry -out:"%outDll" "%outRes" /MACHINE:ARM
del /q "%outRes" >&> nul:
echo Output: %outDll %@filesize[%outDll]
echo.
return