2013-09-04 18 views
7

muszę zainstalować parę instalatorów w tym samym katalogu, więc jest ono sprzeczne z Inno Setup nazwy deinstalatora unins000.exe i unins000.datZmień domyślną nazwę deinstalatora Inno-setup w celu uniknięcia konfliktów nazw

Czy istnieje sposób, aby zmienić domyślną nazwę deinstalatora Inno-Setup?

+0

To niemożliwe. I powinieneś unikać używania hacków z poniższych odpowiedzi. Zmiana nazwy plików deinstalatora spowoduje przerwanie aktualizacji. Zobacz http://www.jrsoftware.org/ishelp/index.php?topic=appendnotes –

Odpowiedz

4

jest to podobne do odpowiedzi Elektrostudios', i to, co pracował dla mnie:

Filename: {cmd}; Parameters: "/C Mkdir ""{app}\Uninstallers\{#MyAppName}"""; Flags: RunHidden WaitUntilTerminated 
    Filename: {cmd}; Parameters: "/C Move ""{app}\unins000.exe"" ""{app}\Uninstallers\{#MyAppName} - uninstall.exe"""; StatusMsg: Installing {#MyAppName}...; Flags: RunHidden WaitUntilTerminated 
    Filename: {cmd}; Parameters: "/C Move ""{app}\unins000.dat"" ""{app}\Uninstallers\{#MyAppName} - uninstall.dat"""; StatusMsg: Installing {#MyAppName}...; Flags: RunHidden WaitUntilTerminated 
    Filename: {cmd}; Parameters: "/C Move ""{app}\unins000.msg"" ""{app}\Uninstallers\{#MyAppName} - uninstall.msg"""; StatusMsg: Installing {#MyAppName}...; Flags: RunHidden WaitUntilTerminated 
    Filename: REG.exe; Parameters: "ADD ""HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Windows 8 ContextMenu - {#MyAppName}_is1"" /V ""UninstallString"" /T ""REG_SZ"" /D ""\""{app}\Uninstallers\{#MyAppName} - uninstall.exe\"""" /F"; StatusMsg: Installing {#MyAppName}...; Flags: RunHidden WaitUntilTerminated 
    Filename: REG.exe; Parameters: "ADD ""HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Windows 8 ContextMenu - {#MyAppName}_is1"" /V ""QuietUninstallString"" /T ""REG_SZ"" /D ""\""{app}\Uninstallers\{#MyAppName} - uninstall.exe\"" /SILENT"" /F"; StatusMsg: Installing {#MyAppName}...; Flags: RunHidden WaitUntilTerminated 

Korzystanie z systemu Windows 7, odkryłem, że «Move» komenda nie będzie działać, chyba że miałem gdzieś przenieść pliki do pierwszego, znaczenie że muszę dodać linię mkdir na górze. Dezinstalator również nie działałby bez przeniesionego pliku .msg, więc podążyłem za wzorcem i dodałem tę linię.

Nie zawracałem sobie głowy zmianą "Windows 8" na "Windows 7", ale to nie miało znaczenia, więc zostawiam to w spokoju. Jeśli jest jakiś problem, jestem nieświadomy, jestem pewien, że ktoś to zaznaczy w komentarzu.

{#MyAppName} to, oczywiście, stała zdefiniowana na górze pliku ISS, deklarująca nazwę aplikacji. Twoja stała może być zdefiniowana inaczej, więc musisz ją zmienić, aby pasowała w razie potrzeby.

+0

Po prostu wolę dawać punkty ludziom, którzy pomagają mi w udzielaniu i odpowiadaniu, dziękuję za udział! – ElektroStudios

+0

Tak, @SertacAkyuz masz rację, to nie jest "zmiana domyślnej nazwy deinstalatora", jednak jest to obejście niemożności zrobienia tego. Tak więc, chociaż nie jest to bezpośrednia odpowiedź na pytanie, to rozwiązuje problem. –

+0

Nie ma gwarancji, że deinstalator ma nazwę 'unins000.exe'. Liczba będzie się różnić, jeśli istnieje inny plik o tej nazwie. Co może się zdarzyć, jeśli na przykład zmienisz swoją aplikację. Zobacz także http://www.jrsoftware.org/ishelp/index.php?topic=appendnotes –

10

Nr "Unins" jest zakodowany na stałe w procedurze generowania nazw plików wykonywalnych, danych i msg, w GenerateUninstallInfoFilename "procedura w" install.pas "źródeł inno-setup.

GenerateFilenames procedura sub ma to:

BaseFilename := AddBackslash(BaseDir) + Format('unins%.3d', [I]); 
UninstallExeFilename := BaseFilename + '.exe'; 
.. 

Jeżeli 'ja' jest liczbą całkowitą i 'basedir' pochodzi od UninstallFilesDir które można zmienić.

6

No, a to jeszcze nie ewentualnie nativelly zmienić nazwę deinstalatora następnie użyję polecenia partii w sekcji run, aby zmienić nazwę deinstalatora i zrobić to samo w ścieżkach rejestru Uninstaller:

[Run] 
Filename: {cmd}; Parameters: "/C Move ""{app}\unins000.exe"" ""{app}\Uninstallers\{#ApplicationName} - uninstall.exe"""; StatusMsg: Installing {#ApplicationName}...; Flags: RunHidden WaitUntilTerminated 
Filename: {cmd}; Parameters: "/C Move ""{app}\unins000.dat"" ""{app}\Uninstallers\{#ApplicationName} - uninstall.dat"""; StatusMsg: Installing {#ApplicationName}...; Flags: RunHidden WaitUntilTerminated 

Filename: REG.exe; Parameters: "ADD ""HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Windows 8 ContextMenu - {#ApplicationName}_is1"" /V ""UninstallString"" /T ""REG_SZ"" /D ""\""{app}\Uninstallers\{#ApplicationName} - uninstall.exe\"""" /F"; StatusMsg: Installing {#ApplicationName}...; Flags: RunHidden WaitUntilTerminated 
Filename: REG.exe; Parameters: "ADD ""HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Windows 8 ContextMenu - {#ApplicationName}_is1"" /V ""QuietUninstallString"" /T ""REG_SZ"" /D ""\""{app}\Uninstallers\{#ApplicationName} - uninstall.exe\"" /SILENT"" /F"; StatusMsg: Installing {#TipName}...; Flags: RunHidden WaitUntilTerminated 
+1

Rozgłaszanie przez jednego, ponieważ byłem w stanie zaadaptować to rozwiązanie do pracy dla mnie (zobacz zamieszczone poniżej rozwiązanie) –

+1

doskonały hack! – CyprUS

7

Inno robi to automatycznie, gdy wykryje inną aplikację instalowaną w tym samym katalogu (na podstawie innej AppID). Nie powinno być potrzeby przechodzenia za jego plecami i zmiany nazwy plików deinstalatora.

+0

To źle, ponieważ trudno powiedzieć, który deinstalator należy do jakiej instalacji. – Magnus

+1

@Magnus Fakt, że ktoś losowo przegląda foldery, nie może ich odróżnić, nie sprawia, że ​​Inno automatycznie obsługuje to błędnie. Jeśli Ty, jako programista, chcesz to ułatwić, dodaj skróty do grupy menu Start, wskazując "{uninstallexe}", skieruj je na aplet Dodaj/Usuń Programy lub ustaw 'UninstallDir'. Inno nadal obsługuje różne aplikacje w tym samym folderze, doskonale i zgodnie z projektem. – Deanna

0

Inno Setup nie oferuje żadnego sposobu na podanie nazwy (lub zmiany nazwy) deinstalatora. Inno Setup samodzielnie zajmuje się konfliktami nazw.

Należy również pamiętać, że przy próbie ręcznej zmiany nazwy deinstalatora (np. Niektóre odpowiedzi tutaj), należy złamać odwołanie do deinstalatora w Dodaj lub zdalną aplikację w Panelu sterowania.

Nawet jeśli poprawisz odniesienie, jest inny problem. Gdy dokonasz aktualizacji później, nowy instalator nie znajdzie logów poprzedniego instalatora i nie będzie mógł ich scalić. W konsekwencji przyszłe odinstalowanie nie spowoduje całkowitego usunięcia aplikacji. Zobacz dokumentację instalacji Inno Setup w wersji Appending to Existing Uninstall Logs.

2

Sam sobie z tym poradziłem. Nie powinieneś przenosić samego dezinstalatora, z powodów wskazanych przez Martina Prikryla. Ale zgadzam się, że nie jest satysfakcjonujące posiadanie wielu ponumerowanych dezinstalatorów siedzących w katalogu bez oczywistych środków informujących o tym, która jest która.

Istnieje rozwiązanie korzystające z urządzeń oferowanych przez Inno Setup. W sekcji [Setup]:

[Setup] 
... 
UninstallFilesDir=Uninstall\exe\{#NAME_OF_APP} 
... 

Następnie w sekcji [Dirs]:

[Dirs] 
... 
Name: Uninstall\exe; Attribs: hidden; 
Name: Uninstall\exe\{#NAME_OF_APP}; Attribs: hidden; 
... 

I wreszcie ty create nazwie skrótów w [Icons] które wskazują na uninstallers które zawsze będą miały taką samą nazwę, ponieważ masz sequestered je:

[Icons] 
... 
Name: Uninstall\{#NAME_OF_UNINSTALLER}; Filename: Uninstall\exe\{#NAME_OF_APP}\unins000.exe 
... 

Pozostawia odniesienia w systemie operacyjnym do samych deinstalatorów, ukrywa mylące pliki wykonywalne w folderze, którego użytkownik zwykle nie widzi, ale nadal ma do nich dostęp, i udostępnia nazwane, opisowe skróty, które mogą być umieszczone w tym samym folderze. Możesz również nadać skrótom dobrą ikonę. Na dobrą sprawę, może upuść dodatkowe README w katalogu \ exe, aby wyjaśnić, co się dzieje, na wypadek, gdyby ktoś się wścibski (naturalnie).