设为首页 收藏本站
查看: 879|回复: 0

[经验分享] 使用python实现对windows软件包的安装和卸载

[复制链接]

尚未签到

发表于 2015-4-22 10:05:49 | 显示全部楼层 |阅读模式
  在对windows安装包产品进行测试时,安装和卸载是难免的,并且人工的手动安装和卸载会花费大量的精力和时间,为此需要编写一个脚本来实现对windows安装包产品的自动卸载和安装。
  首先参考了 http://www.iyunv.com/TankXiao/archive/2012/10/18/2727072.html#msiexec ,该博文详细讲解了使用msiexe命令进行卸载的内容,同时提供了使用C#实现的卸载程序。对此,我想到了使用python编写脚本实现类似的功能。主要的算法大致是使用软件名称去注册表中搜索到该软件的包括productCode在内的uninstallString,而后根据这个字符串进行默认卸载,再根据软件的msi包路径进行默认安装。小弟菜鸟一枚,初次编写脚本,望大家多指点。
  
  



#this function is used to get the uninstall string of a software in windows
#input:the dir which is a register key,the name of software product
#output:the uninstall string,if None,means no find  
def getProductCode(dir,prodcutName):
uninstallString = ''
#get the key of the uninstall path
#get the subkey,get the one which have the same name with productName
#by the subkey,get the value of uninstall string of it
try:
key = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE ,dir)
j=0
while 1:
name = _winreg.EnumKey(key,j)
#name = repr(name)
path = dir + '\\' + name
subkey = _winreg.OpenKey(key ,name)
value,type ='',''
try:
value,type = _winreg.QueryValueEx(subkey,'DisplayName')
except Exception,e:
pass
if value == prodcutName:
try:
value2,type2 = _winreg.QueryValueEx(subkey,'UninstallString')
except Exception,e:
pass
uninstallString = value2
return uninstallString
_winreg.CloseKey(subkey)
#print value,'    ',type
j+=1   
except WindowsError,e:
print
finally:
_winreg.CloseKey(key)
pass
#define the function uninstall_productbyCode(),to uninstall the product by code
def uninstall_productbyCode(code):
#uninstall_cmd = "msiexec  /x /quiet /norestart " + path
uninstall_cmd = code + '  /quiet'
print uninstall_cmd
if os.system(uninstall_cmd) == 0:
return 0;
else:
return -1;
#define the function install_product(),to install the product
def install_product(path):
install_cmd = "msiexec /qn /i " + path
print install_cmd
if os.system(install_cmd) == 0:
return 0;
else:
return -1;
#define the function Is64Windows(),to judge the system is whether 64Windows
def Is64Windows():
return 'PROGRAMFILES(X86)' in os.environ

#define the function agent_install(),to auto install product     
def product_install():
if Is64Windows():
product_path = product_loc + "softwarename_x64.msi"
else:
product_path = product_loc + "softwarename.msi"
reg_dir = cst_path4_x86
uninstallString = getProductCode(reg_dir,u'软件中文名')
print uninstallString
#for maybe in english system,we need to get english version product code,if we don't get chinese of that
if uninstallString == None:
uninstallString = getProductCode(reg_dir,u'软件英文名')
print uninstallString
# uninstall product
if uninstallString != None and 0 == uninstall_productbyCode(uninstallString):
print "uninstall softwarename scuessful"
else:
print "uninstall softwarename fail"
# install product
if 0 == install_product(product_path):
print "install softwarename scuessful"
else:
print "install softwarename fail"
pass

  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-59515-1-1.html 上篇帖子: 三种常见的聚类算法的python实现 kmeans、Hierarchical clustering、kmedoids 下篇帖子: Python框架之Django学习笔记(十一)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表