<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; AHK: Как реализовать uninstall]]></title>
	<link rel="self" href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=10795&amp;type=atom" />
	<updated>2015-07-19T11:52:10Z</updated>
	<generator>PunBB</generator>
	<id>http://forum.script-coding.com/viewtopic.php?id=10795</id>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Как реализовать uninstall]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=95786#p95786" />
			<content type="html"><![CDATA[<p>Намёк понял, но я обещал сделать.</p><p>Основное сделал, осталась рутина.</p>]]></content>
			<author>
				<name><![CDATA[Indomito]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27285</uri>
			</author>
			<updated>2015-07-19T11:52:10Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=95786#p95786</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Как реализовать uninstall]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=95785#p95785" />
			<content type="html"><![CDATA[<p><span style="color: green"><strong>Indomito</strong>, вам не пора отдохнуть недельку? Заодно Высоцкого освежите в памяти.</span></p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2015-07-19T10:59:46Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=95785#p95785</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Как реализовать uninstall]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=95755#p95755" />
			<content type="html"><![CDATA[<p><strong>YMP</strong> Извиняюсь, что то я погорячился. <img src="//forum.script-coding.com/img/smilies/big_smile.png" width="15" height="15" /></p>]]></content>
			<author>
				<name><![CDATA[Indomito]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27285</uri>
			</author>
			<updated>2015-07-19T07:13:31Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=95755#p95755</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Как реализовать uninstall]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=95744#p95744" />
			<content type="html"><![CDATA[<p>Подредактировал немного.</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2015-07-18T20:10:43Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=95744#p95744</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Как реализовать uninstall]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=95725#p95725" />
			<content type="html"><![CDATA[<p><strong>wisgest</strong> спасибо за информацию, я как понимаю свои переменные добавлять можно, т.е. это не вызовет проблем?</p><p><strong>teadrinker</strong> спасибо за скрипт, а можно его в аттач, а то при копировании кода можно случайно промазать, а кнопки &quot;Выделить код&quot; нет.</p>]]></content>
			<author>
				<name><![CDATA[Indomito]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27285</uri>
			</author>
			<updated>2015-07-18T13:40:47Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=95725#p95725</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Как реализовать uninstall]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=95716#p95716" />
			<content type="html"><![CDATA[<p>Так работает:<br /></p><div class="codebox"><pre><code>Clean := new Uninstall

MsgBox, 52, Деинсталляция, Этот код удалит папку`n`n%A_ScriptDir%`n`n`со всеми файлами!`nПродолжить?
IfMsgBox, No
   ExitApp,, Clean.cancel := 1
/*
Здесь код деинсталляции
*/
ExitApp

class Uninstall
{
   __New()  {
      if !A_IsCompiled  {
         MsgBox, Скомпилируйте скрипт!
         ExitApp
      }
      
      for k, param in [&quot;ParentPID&quot;, &quot;ParentPath&quot;]
         %param% := %k%
      if ParentPath  {
         SetWorkingDir, % A_Temp
         Process, WaitClose, % ParentPID
         SplitPath, ParentPath,, Folder
         ComObjCreate(&quot;Scripting.FileSystemObject&quot;).DeleteFolder(Folder, 1)
         ExitApp,, this.CreateProcess(&quot;rundll32&quot;, DEBUG_ONLY_THIS_PROCESS := 2)
      }
   }
   
   __Delete()  {
      if this.cancel
         ExitApp
      
      TmpFilePath := A_Temp &quot;\ahk_uninstall_&quot; A_TickCount &quot;.exe&quot;
      FileCopy, % A_ScriptFullPath, % TmpFilePath, 1

      hFile := this.OpenTmpFile(TmpFilePath)
      ChildPID := this.CreateProcess(TmpFilePath &quot; &quot; DllCall(&quot;GetCurrentProcessId&quot;) &quot; &quot;&quot;&quot; A_ScriptFullPath &quot;&quot;&quot;&quot;, 0)
      Process, Wait, % ChildPID
      DllCall(&quot;CloseHandle&quot;, Ptr, hFile)
   }
   
   OpenTmpFile(FilePath)  {
      static GENERIC_READ := 0x80000000, FILE_SHARE_READ := 1, FILE_SHARE_DELETE := 4
           , OPEN_EXISTING := 3, FILE_FLAG_DELETE_ON_CLOSE := 0x4000000
           , FILE_ATTRIBUTE_TEMPORARY := 0x100
      
      VarSetCapacity(SECURITY_ATTRIBUTES, size := 2*A_PtrSize + 4, 0)
      NumPut(size, SECURITY_ATTRIBUTES), NumPut(bInheritHandle := 1, &amp;SECURITY_ATTRIBUTES + 2*A_PtrSize)
      Return DllCall(&quot;CreateFile&quot;, Str, FilePath
                                 , Int, GENERIC_READ
                                 , Int, FILE_SHARE_READ|FILE_SHARE_DELETE
                                 , Ptr, &amp;SECURITY_ATTRIBUTES
                                 , Int, OPEN_EXISTING
                                 , Int, FILE_FLAG_DELETE_ON_CLOSE|FILE_ATTRIBUTE_TEMPORARY
                                 , Ptr, 0)
   }
   
   CreateProcess(CommandLine, flag)  {
      VarSetCapacity(STARTUPINFO, size := 4*A_PtrSize + 8*4 + 5*A_PtrSize, 0)
      NumPut(size, STARTUPINFO)
      VarSetCapacity(PROCESS_INFORMATION, 2*A_PtrSize + 8, 0)
      
      DllCall(&quot;CreateProcess&quot;, Ptr, 0, Str, CommandLine
                             , Ptr, 0, Ptr, 0
                             , Int, bInheritHandles := 1, UInt, flag, Ptr, 0, Ptr, 0
                             , Ptr, &amp;STARTUPINFO, Ptr, &amp;PROCESS_INFORMATION)
                             
      DllCall(&quot;CloseHandle&quot;, Ptr, hThread := NumGet(PROCESS_INFORMATION))
      DllCall(&quot;CloseHandle&quot;, Ptr, hProcess := NumGet(&amp;PROCESS_INFORMATION + A_PtrSize))
      Return PID := NumGet(&amp;PROCESS_INFORMATION + 2*A_PtrSize, &quot;UInt&quot;)
   }
}</code></pre></div><p><a href="http://content.screencast.com/users/teadrinker/folders/Files/media/3bc789ae-534c-40f9-bbad-fd608a991a52/UninstallFolder.ahk?downloadOnly=true">UninstallFolder.ahk</a><br />Осторожно! Скомпилированный файл удаляет себя вместе со своей папкой и всеми файлами в ней.</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2015-07-17T22:04:26Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=95716#p95716</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Как реализовать uninstall]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=95706#p95706" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Indomito пишет:</cite><blockquote><p>2.3&nbsp; &nbsp;Какие переменные должны быть там? Имя, тип и информация(просто описать).</p></blockquote></div><p><a href="http://sapphir.narod.ru/regedit/dowload/WinXP.rar">Пароль к архиву — «notepad»</a>:<br /></p><div class="quotebox"><blockquote><p>Информация о каждой программе храниться в отдельном разделе. В каждом разделе обязательно должны присутствовать два параметра:</p><p>STRING DisplayName, значение - имя, которое отображается в списке удаляемых программ</p><p>STRING UninstallString, значение - путь к программе удаления</p><p>также могут присутствовать другие пункты, их обычно добавляют современные инсталляторы:</p><p>STRING DisplayIcon - иконка, соответствующая приложению в диалоге Установка и удаление программ <br />STRING ModifyPath - Путь инсталлятора для изменения установочных параметров программы. Еcли этот ключ установлен, то Кнопка Заменить/Удалить распадается на две - Заменить (выполняется ModifyPath) и Удалить(выполняется UninstallString) </p><p>Следующие параметры относятся к диалоговому окну Поддержка</p><p>STRING Publisher - Издатель продукта <br />STRING Readme - Путь к файлу Readme для данного продукта <br />STRING Comments - Комментарии к продукту <br />STRING Contact - Контактное лицо (e-mail и т.п.) <br />STRING DisplayVersion - Номер версии <br />STRING ProductID - Код продукта <br />STRING RegCompany - Зарегистрированная компания <br />STRING RegOwner - Зарегистрированный владелец <br />STRING URLInfoAbout - Домашняя страничка производителя (параметр Publisher становится ссылкой) <br />STRING URLUpdateInfo - URL обновления продукта <br />STRING HelpLink - URL сведений о поддержке</p></blockquote></div>]]></content>
			<author>
				<name><![CDATA[wisgest]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=3850</uri>
			</author>
			<updated>2015-07-17T17:02:09Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=95706#p95706</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Как реализовать uninstall]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=95705#p95705" />
			<content type="html"><![CDATA[<p>Обратил внимание, что мой скрипт с вариантом удаления вместе с папкой не всегда удаляет файл-копию. Попозже разберусь.</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2015-07-17T15:53:31Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=95705#p95705</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Как реализовать uninstall]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=95696#p95696" />
			<content type="html"><![CDATA[<p>Я сам заполнил только две переменных <strong>DisplayName</strong> и <strong>UninstallString</strong> этого достаточно для <strong>appwiz.cpl</strong>.<br />Просто я не уверен - первый раз так делаю. <img src="//forum.script-coding.com/img/smilies/wink.png" width="15" height="15" /></p><p>Есть ещё <strong>DisplayIcon</strong> и ей подобные, ну я просто сомневаюсь что бы <em>&quot;не с глючило&quot;</em> в не подходящий момент... ну как всегда это бывает.</p>]]></content>
			<author>
				<name><![CDATA[Indomito]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27285</uri>
			</author>
			<updated>2015-07-17T14:28:51Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=95696#p95696</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Как реализовать uninstall]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=95691#p95691" />
			<content type="html"><![CDATA[<p>Посмотрите какие параметры есть для уже установленных приложений и как они влияют на отображение в appwiz.cpl, почти все из них необязательные, например ссылка на сайт производителя, некоторые «фирменные» — используются самими установщиками и никак не учитываются в appwiz.cpl.</p>]]></content>
			<author>
				<name><![CDATA[wisgest]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=3850</uri>
			</author>
			<updated>2015-07-17T13:33:08Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=95691#p95691</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Как реализовать uninstall]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=95688#p95688" />
			<content type="html"><![CDATA[<p>Так, с этим я разберусь, а <strong>пункт 2.3</strong>?</p>]]></content>
			<author>
				<name><![CDATA[Indomito]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27285</uri>
			</author>
			<updated>2015-07-17T12:44:43Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=95688#p95688</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Как реализовать uninstall]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=95687#p95687" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>wisgest пишет:</cite><blockquote><p>2.2&nbsp; &nbsp;Одинаковой информацией оба?</p></blockquote></div><p>Однотипной информацией один из двух (или для всех пользователей, или только для текущего).</p>]]></content>
			<author>
				<name><![CDATA[wisgest]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=3850</uri>
			</author>
			<updated>2015-07-17T12:41:14Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=95687#p95687</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Как реализовать uninstall]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=95680#p95680" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><p>Не понял, переведите. Безопаснее, видимо, всё-таки использовать rundll32, он уж наверняка есть.</p></blockquote></div><p> Ясно, просто выше написано было. </p><div class="quotebox"><cite>wisgest пишет:</cite><blockquote><p>Ну calc — довольно бесполезная вещь, от которой не зависит жизнеспособность системы, так что может быть выпилена напрочь (кто-то считает в Excel, кто-то — в MathCad, кто-то — в чём-то наподобие JavaScript-консоли).<br />taskmgr, explorer — если процесс существует, новый гасится.<br />Лучше что-то наподобие rundll32…</p></blockquote></div><p> почему то решил, что это относится к файлу - я ведь не прав? <br />Это к процессу, верно?</p><p>По остальному вопросов нет, только пункты <strong>2.2</strong> и <strong>2.3</strong> мне до конца не ясны, т.е. что на 100% необходимо там иметь место.<br />Особенно пункт <strong>2.3</strong></p>]]></content>
			<author>
				<name><![CDATA[Indomito]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27285</uri>
			</author>
			<updated>2015-07-17T11:41:57Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=95680#p95680</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Как реализовать uninstall]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=95678#p95678" />
			<content type="html"><![CDATA[<p><strong>YMP</strong>, угу, «я драчистый изумруд». <img src="//forum.script-coding.com/img/smilies/lol.png" width="15" height="15" /></p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2015-07-17T11:40:04Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=95678#p95678</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Как реализовать uninstall]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=95677#p95677" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Indomito пишет:</cite><blockquote><p><strong>&quot;</strong><span style="color: #3366ff">Дорогая передача! Во субботу, чуть не плача,<br />&nbsp; Вся Канатчикова дача к телевизору рвалась,<br />&nbsp; Вместо чтоб поесть, помыться у колодца и забыться,<br />&nbsp; Вся безумная больница у экрана собралась...</span><strong>&quot;</strong>&nbsp; &nbsp;(<strong>Владимир Высоцкий</strong>)</p></blockquote></div><p>У какого ещё колодца? <img src="//forum.script-coding.com/img/smilies/big_smile.png" width="15" height="15" /> Уколоться и забыться.</p>]]></content>
			<author>
				<name><![CDATA[YMP]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=81</uri>
			</author>
			<updated>2015-07-17T11:37:14Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=95677#p95677</id>
		</entry>
</feed>
