사용자 도구

사이트 도구


project:ccleanerautoupdate

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판이전 판
다음 판
이전 판
project:ccleanerautoupdate [2013/04/20 07:50] – [파일 다운로드 및 설치] changwooproject:ccleanerautoupdate [2014/10/09 21:24] (현재) – 바깥 편집 127.0.0.1
줄 5: 줄 5:
 CCleaner는 개인이 집에서 무료로 이용할 수 있는 '홈(Home)', 좀 더 기능이 강화된 '프로페셔널(Professional)', 그리고 '비즈니스(Business)' 등 몇 가지 버전이 있습니다. 무료로 이용할 수 있는 홈 버전도 사실 상당히 쓸만합니다. 다만 자동 업데이트가 지원되지 않아 매번 홈페이지에서 직접 파일을 다운로드 받아 설치를 해 줘야 한다는 점이 불편합니다. CCleaner는 개인이 집에서 무료로 이용할 수 있는 '홈(Home)', 좀 더 기능이 강화된 '프로페셔널(Professional)', 그리고 '비즈니스(Business)' 등 몇 가지 버전이 있습니다. 무료로 이용할 수 있는 홈 버전도 사실 상당히 쓸만합니다. 다만 자동 업데이트가 지원되지 않아 매번 홈페이지에서 직접 파일을 다운로드 받아 설치를 해 줘야 한다는 점이 불편합니다.
  
-그런데 쓰다 보면 이 무료 버전의 자동 업데이트 미지원이 은근히 귀찮습니다. 대략 2-3주, 길면 한 두달에 한 번 생각날 때마다 한 번 정도 사용하는데 거의 이 주기가 지나면 적어도 1번쯤은 프로그램의 업데이트가 되어 있죠. 그래서 사실상 CCleaner를 사용할 때마다 먼저 업데이트부터 시작하고 최적화 작업을 속행하곤 했습니다. 이 푸닥거리를 수회 반복하면 "그냥 유료로 지를까?" 생각을 해보게 됩니다. 네, 지르셔도 됩니다. 좋다고 생각하시면 하나 지르세요 ;-)+그런데 쓰다 보면 이 무료 버전의 자동 업데이트 미지원이 은근히 귀찮습니다. 대략 2-3주, 길면 한 두달에 한 번 생각날 때마다 한 번 정도 사용하는데 거의 이 주기가 지나면 적어도 1번쯤은 프로그램의 업데이트가 되어 있죠. 그래서 사실상 CCleaner를 사용할 때마다 먼저 업데이트부터 완료한 후에야 최적화 작업을 하곤 했습니다. 이 푸닥거리를 수회 반복하면 "자동 업데이트가 지원되는 유료를 질러 볼까?" 생각을 해보게 됩니다. 네, 지르셔도 됩니다. 좋다고 생각하시면 하나 지르세요 ;-)
  
-하지만 여전히 무료로 사용하고 싶지만, 이 귀찮음을 감수하시는 분들이 계실 터입니다. 살짝 반칙 같지만, 그래서 약간 제작사인 Piriform에 미안한 맘이 들지만, 그래도 일반 사용자가 할 수 있는 적합한 선에서 이 귀찮음을 덜 수 있는 방법이 없을까 생각해 보았습니다. 그리고 제 파이썬 잉여력을 좀 쏟아보기로 했습니다.+하지만 여전히 무료로 사용하면서, 이 귀찮음을 온전히 감수하시는 분들이 계실 터입니다. 그런 분들을 위해 살짝 반칙 같지만, 그래서 약간 제작사인 Piriform에 미안한 맘이 들지만, 할 수 있는 적합한 선에서 이 귀찮음을 덜 수 있는 방법이 없을까 생각해 보았습니다. 그리고 제 파이썬 잉여력을 좀 쏟아보기로 했습니다.
  
-사실 얼마전부터 CCleaner의 유료 버전인 CCleaner Professional을 사용중입니다. 이 버전은 자동 업데이트가 지원되어 편하게 사용할 수 있지만, 사실 무료 버전의 CCleaner와 별다른 차이가 없습니다. 자동 업데이트가 지원되지 않는 점만 감안하면 무료 버전도 충분히 쓸만합니다. 사실 그렇게 큰 차이도 없는데 돈을 지불한 것이 조금 아깝기까지도 합니다. +사실 얼마전부터 CCleaner의 유료 버전인 CCleaner Professional을 사용중입니다. 이 버전은 자동 업데이트가 지원되어 편하게 사용할 수 있지만, 사실 무료 버전의 CCleaner와 별다른 차이가 없습니다. 자동 업데이트가 지원되지 않는 점만 감안하면 무료 버전도 충분히 쓸만합니다. 사실 그렇게 큰 차이도 없는데 돈을 지불한 것이 조금 아깝기까지도 합니다. 이번에도 역시 파이썬 2.7 스크립트를 사용합니다. CCleaner는 윈도우 기반의 소프트웨어이므로 이 스크립트는 윈도우에서만 동작한다고 가정합니다. 
- +
-이번에도 역시 파이썬 스크립트를 사용합니다. CCleaner는 윈도우 기반의 소프트웨어이므로 이 스크립트는 윈도우에서만 동작한다고 가정합니다. +
  
 ===== 작업 방법 ===== ===== 작업 방법 =====
줄 67: 줄 65:
 </code> </code>
  
-'/L=1042' 스위치는 한글로 설치하라는 옵션입니다. 타 언어는 [[http://support.microsoft.com/kb/221435|이 페이지]]에서 확인하세요. '/D='는 유저가 원하는 곳에 설치할 때 필요한 옵션입니다. /S는 기본값으로 알아서 설치하기 위해 사용됩니다. 크롬과 같은 광고 프로그램들이 이 스위치를 켠다고 해서 같이 설치되지는 않는 것으로 파악하였습니다.+'/L=1042' 스위치는 한글로 설치하라는 옵션입니다. 타 언어는 [[http://support.microsoft.com/kb/221435|이 페이지]]에서 확인하세요. '/D='는 유저가 원하는 곳에 설치할 때 필요한 옵션입니다. '/S'는 기본값으로 알아서 설치하기 위해 사용됩니다. 크롬과 같은 광고 프로그램들이 이 스위치를 켠다고 해서 같이 설치되지는 않는 것으로 파악하였습니다.
  
 ===== 구현 ===== ===== 구현 =====
줄 78: 줄 76:
   * ''download_url'': CCleaner 설치 파일을 다운로드 받을 수 있는 URL입니다. %%http://www.piriform.com/ccleaner/download/standard%%가 기본입니다.   * ''download_url'': CCleaner 설치 파일을 다운로드 받을 수 있는 URL입니다. %%http://www.piriform.com/ccleaner/download/standard%%가 기본입니다.
   * ''download_re'': 다운로드 링크를 얻을 수 있는 정규표현식을 설정합니다.   * ''download_re'': 다운로드 링크를 얻을 수 있는 정규표현식을 설정합니다.
-  * ''install_arg'': 무료 버전의 ccleaner도  +  * ''install_arg'': 설치 파일 뒤에 붙일 인수를 여기에 적습니다. 
-==== 로컬 PC 쿼리 스크립트 ==== + 
-==== 온라인 최신 버전 쿼리 스크립트 ==== +<code text ccleaner_update.cfg> 
-==== 파일 다운로드 및 설치 스크립트 ==== +ccleaner_path: C:\\Program Files\\CCleaner\\CCleaner.exe 
-==== 위 세 스크립트를 동작시키는 스크립트 ====+release_url: http://www.piriform.com/ccleaner/download 
 +relaese_re: <ul class="versionHistory">.+<strong>(.+)</strong> \((.+?)\) 
 +download_url: http://www.piriform.com/ccleaner/download/standard 
 +download_re: <a href="(.+)">restart the download</a> 
 +install_arg: /S /L=1042 
 +</code> 
 + 
 +==== 본 구현 ==== 
 +<code python CCleanerAutoUpdate.py> 
 +# -*- coding: UTF-8 -*- 
 +import sys 
 +import os 
 +import urllib2 
 +import re 
 + 
 +def GetHTML(URL): 
 + obj  = urllib2.urlopen(URL) 
 + html = obj.read() 
 + obj.close() 
 + return html 
 +  
 +# Version 확인을 위한 클래스 
 +class Version: 
 + 
 + major = None 
 + minor = None 
 + build = None 
 +  
 +로컬 버전 문자열 읽음. 
 + def FromLocalVersionString(self, localVersionString): 
 + vers localVersionString.split('.'
 + self.major int(vers[0]) 
 + self.minor int('%s%s' % (vers[1], vers[2])) 
 + self.build int(vers[3]) 
 +  
 + # 최신 버전 (웹페이지에서 확인한) 문자열 읽음 
 + def FromCurrentVersionString(self, currentVersionString): 
 + vers currentVersionString.split('.'
 + self.major int(vers[0]) 
 + self.minor int(vers[1]) 
 + self.build = int(vers[2]) 
 +  
 + def __str__(self): 
 + return '%d/%d/%d' % (self.major, self.minor, self.build) 
 +  
 + # 로컬 버전 <= 최신버전이므로 !=== 만 정의. 
 + def __eq__(self, other): 
 + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ 
 + 
 + def __ne__(self, other): 
 + return not self.__eq__(other)  
 + 
 +  
 +def CheckUpdate(config): 
 + # check CCleaner.exe exists! 
 + if os.path.exists(config['ccleaner_path']) == False: 
 + print >> sys.stderr, '%s does not exist!' % config['ccleaner_path'
 + return 1 
 +  
 + # local ccleaner version  
 + print "Checking installed CCleaner's version..." 
 + command 'wmic DATAFILE WHERE NAME="%s" GET version > version.txt' % config['ccleaner_path'
 + os.system(command) 
 +  
 + # get version 
 + with open('version.txt', 'r') as f: 
 + text   unicode(f.read(), 'utf-16'
 + iv_txt text.split(u'\n')[1].strip()  
 + 
 + # current release version 
 + print 'Checking current CCleaner version at Piriform...' 
 + release_html GetHTML(config['release_url']) 
 + release_exp  re.compile(config['release_re'] , re.DOTALL|re.MULTILINE) 
 + release_srch release_exp.search(release_html).groups() 
 +  
 + cv_txt  release_srch[0].strip()[1:] # exclude heading 'v' 
 + reldate release_srch[1].strip() 
 +  
 + # To canonical versino expression. 
 + installed_ver Version() 
 + current_ver  Version() 
 +  
 + installed_ver.FromLocalVersionString(iv_txt) 
 + current_ver.FromCurrentVersionString(cv_txt) 
 +  
 + print 'Installed CCleaner version:', installed_ver 
 + print 'Current CCleaner version:', current_ver, reldate 
 +  
 + # compare two 
 + if installed_ver == current_ver: 
 + print 'You\'re using current version. Nothing to do.' 
 + return 0  
 + else: 
 + print 'There\'s a new update available!' 
 +  
 + # download current release 
 + download_html GetHTML(config['download_url']) 
 + download_exp  = re.compile(config['download_re']) 
 + download_srch = download_exp.search(download_html) 
 +  
 + url           = download_srch.groups()[0] 
 + filename      = url.split('/')[-1]  
 +  
 + print 'Begin downloading...' 
 + obj = urllib2.urlopen(url) 
 + with open(filename, 'wb') as f: 
 + f.write(obj.read()) 
 + obj.close() 
 +  
 + print 'Downloading complete!' 
 +  
 + cmd = filename + ' ' + config['install_arg'
 +  
 + print 'Installing...' 
 + os.system(cmd) 
 + print 'Complete!'  
 + return 0 
 +  
 +def ParseConfig(configfile): 
 + config = {} 
 + with open(configfile, 'r') as f: 
 + for l in f: 
 + colon = l.find(':'
 + prop  = l[0:colon].strip() 
 + val   = l[colon+1:].strip() 
 +  
 + config[prop] = val 
 +  
 + return  config 
 + 
 +def main(argv):  
 + 
 + # parse config file 
 + configfile = './CCleanerAutoUpdate.cfg' 
 + if len(argv) == 2: 
 + configfile = argv[1] 
 + config = ParseConfig(configfile) 
 +  
 + # begin the job 
 + return CheckUpdate(config) 
 +  
 +if __name__ == '__main__': 
 + sys.exit(main(sys.argv)) 
 +</code>
  
  
 ===== 끝마치며 ===== ===== 끝마치며 =====
-참으로 잉여롭습니다혹시나 CCleaner 설치라는 혹을 떼려다가 스크립트 관리라는 혹을 붙인 게 아닌가 싶습니다. 하지만 호기심을 시켰다는 점에서 만족니다. :-)+참으로 잉여롭습니다! :-) 혹시나 CCleaner 설치라는 혹을 떼려다가 스크립트 관리라는 혹을 붙인 게 아닌가 싶습니다. 하지만 호기심을 다는 점에서는 대만족니다. :-) 계속 사용하다보면 ccsetup.exe 파일이 쌓이게 될 수도 있는데, 이것은 설치 후 직접 삭제하시든지, 스크립트를 수정하시면 됩니다. 관리자 권한까지는 완전 자동화하기 어려웠습니다. 이건 사용자가 한 번 확인해 주어야 할 부분이네요. 스크립트는 윈도우 8에서 동작을 확인했습니다. 
  
 ===== 참고자료 ===== ===== 참고자료 =====
project/ccleanerautoupdate.1366444259.txt.gz · 마지막으로 수정됨: 2014/10/09 21:23 (바깥 편집)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki