存档

文章标签 ‘工具’

windows 命令行临时使用环境变量

2024年4月1日 没有评论

对于过去的 cmd 命令行,可以使用 set ABC=xxx 来设置环境变量。

然后使用 echo ABC 来打印其值。

对于新的 power shell 命令行,就需要更换写法了,$Env:ABC=xxx

如果要打印,就直接使用 $Env:ABC 就可以了。

需要强调的一句是,这些都是在当前命令行上下文临时使用的,一旦关闭了,这些环境变量就不存在了。有利有弊,看需求。例如我自己就是用来设置代理下载第三方库或者依赖包,非常方便。

分类: 一句话, 日常 标签: ,

如何完整卸载 McAfee

2024年3月15日 没有评论

要说啊还真是只有魔法才可以打败魔法。测试机上的 McAfee 软件要卸载,通过控制面板里的添加删除程序结果自卸载失败,而且是每次都失败,占用着磁盘空间。

经过一番搜索,发现了来自官方的 MCPR 卸载工具,可以完整地卸载。

下载地址是: https://download.mcafee.com/molbin/iss-loc/SupportTools/MCPR/MCPR.exe

运行后会提示输入验证码,以防止误操作。之后就需要耐心等一等了,直到给出提示说卸载成功。老实讲,比我预期的时间还要长一些。

分类: 一句话, 日常 标签: ,

表格文本

2021年9月5日 没有评论

最近要实现一段代码逻辑,里面涉及到了好几个条件。最后整理出一个表格,但是感觉应该把这个表格作为注释放到代码文件里,方便后来的维护人员。

可是找了好久都没有找到这样的工具,后来终于被我无意间给发现了,分享给大家。

https://tableconvert.com/?output=text

分类: 一句话, 日常 标签:

查看文件和文件夹被什么程序使用

2021年8月23日 没有评论

有时候经常发生要删除、移动、重命名文件夹/文件的时候,系统提示有程序正在使用,导致操作无法继续。

不妨按照下面的方式:

  1. 打开资源监视器
  2. 选择 “CPU”标签页,可以看到下面第三行“关联的句柄”,里面还有个搜索框
  3. 在搜索框里输入受影响的文件夹名称,回车等待一段时间
  4. 下面列表就会显示具体是哪个进程在占用

这个还是蛮方便的,不需要使用 Unlocker 之类的第三方程序。

分类: 一句话, 日常 标签:

MinIO 分布式存储工具

2021年5月7日 没有评论

这几天在寻思怎么安全地保存文件,以前一直是放到 MongoDB 里的 GridFs ,但是看到网上有人现身说法,提示千万不要用数据库存储文件,如果文件损坏就无法挽回了。想一想还是有几分道理的,搞得我都有点不自信了。

经过一番搜索,发现了 MinIO 这么一个工具。

其实我并不在乎是否支持亚马逊的S3,也不关心是否是分布式,其服务器端够轻量,蛮不错。

从其官网下载文件后,就可以运行试一试拉。

minio.exe server c:\data

程序会输出当前的 appkey 和 secretkey,以及可访问的 url 地址。默认的账号和密码就是 minioadmin,登录进去看了看,就是和普通的网盘界面差不多。

创建了 bucket,上传文件,然后在文件夹里确认。

基本上,每创建一个 bucket ,就会在程序的根目录下创建一个同名的文件夹,里面存放上传的文件。此外,还有生成一些文件相关的元数据保存在config文件夹里。我尝试了本地直接删除文件夹,然后在网页里上传也会正确提示这个bucket 不存在了。不过 config 文件夹里还是会有一个同名文件夹不会被删除。当然啦,这样的场景,对于真实产线其实就比较少见了。

这个工具有一个比较厉害的是如果一半的硬盘坏掉了,都可以把文件恢复过来,而且是基于文件粒度的。像一些磁盘坏道修复工具,粒度都是基于分区的,速度会慢很多。听起来很有趣的样子。

分类: 日常 标签:

inno setup初探

2014年6月10日 没有评论

由于工作的原因,需要对应用程序制作安装包。在以前的项目中,都是使用的 InstallShield  来做的安装包,最近的一个项目是从一个日本开发团队的项目中新建的一个分支,他们原本的安装包都是使用 Inno Setup 来创建的,结合项目背景和安装包的复杂度,我们就踏上了inno setup的路。

inno setup 相对于 InstallShield 轻量了很多,也是使用了 iss 作为安装脚本文件的后缀。常量的定义也大大方便了开发人员。

下面描述下常见的常量

AppId 应用程序唯一ID
AppName 应用程序名称
AppVersion 应用程序版本号
AppPublisher 应用程序制造商
AppSupportURL 应用程序厂商的URL

DefaultDirName 默认的安装路径
OutputDir exe安装包的输出路径
UninstallDisplayIcon 卸载程序的图标

上面的几个变量中,第一部分的信息会显示在添加删除程序中,尤其以AppId最为重要,操作系统以此来区分不同的应用程序。如果是同一个应用程序不同的版本,请保证该变量始终是相同的。inno setup可以帮助生成GUID格式的AppId。

而[Files]段是描述了拷贝文件的路径和方式,例如下面的

Source : “{#SourcePath}\WinGather.exe”; DestDir: “{app}”; Flags: ignoreversion

意思就是把 SourcePath 定义的目录下的 WinGather.exe 程序拷贝到程序的安装目录下。{app} 是一个系统变量,表示程序在用户机器上的安装目录。ignoreversion 是在拷贝的过程中忽略版本的不同。

如果一个应用中有很多个文件需要拷贝,有的还包括子目录,都这样写就会很琐碎。于是就有这样的版本:

Source: “{#SourcePath}\ccprompt\*”; DestDir: “{app}\ccprompt”; Flags:ignoreversion recursesubdirs

从这里我们可以看到通配符*的使用,这样就会方便很多哟。此外,recursesubdirs 参数表示如果包含子目录的话,那么连同子目录也一起拷贝。这样 [Files] 就会少很多,尽管有通配符的支持,但是实际应用中要看情况而定,目的是为了避免安装包拷贝时的准确性,如果安装不对劲,也方便查找定位原因。

[run]段的作用是描述在安装的最后一步所要做的操作,多用于启动服务或者清理等操作,例如下面的:

Filename:”net.exe”; Parameters:”stop ccsdk”; Flags:waituntilterminated runhidden runascurrentuser;

这个例子就是调用 net 来停止一个叫做 ccsdk 的服务,同时有3个额外的选项,分别表示等这个操作完成后再进行后续的安装,不显示界面,以当前用户即管理员权限运行。如果运行一个命令行或者批处理,如果不使用 runhidden,那么在界面上就会看到有一个窗口一闪而过,体验不是很好。

[uninstallDelete]段的作用是描述在卸载的时候,要删除的文件,多用于程序在运行期间产生的文件例如日志、临时文件等,例如:

Type:filesanddirs; Name:”{app}\log.txt”

上面就是简单的描述了一下,inno setup其实非常简单,环境本身也提供了安装想到和帮助文档,文档里写的是非常的详细。所以我这里几乎没有什么内容可写。对于E文不懂的同学,可以在网上下一个中文版的帮助手册。最后说一下,inno setup的安装脚本是不区分大小写的。

分类: 日常 标签: , ,

jQueryPad++发布

2011年12月31日 1 条评论

我前面文章提及 jQueryPad 并说自己会重写一个类似的界面了,现在 jQueryPad++ 出了第一个版本了。

先上一个界面

jQueryPad++是模仿 jQueryPad 的应用,是一个方便快捷的 JavaScript/HTML 编辑调试器,因此取名为jQueryPad++。事实上,jQueryPad很优秀,界面很漂亮,代码结构也很清晰。

jQueryPad在使用的时候,会把临时文件放在 C:\Users\【用户】\AppData\Local\jQueryPad ,但是,但是,但是不会删除这些临时文件,国内的优化软件例如QQ管家、360什么的也不会清理这里的临时文件,所以造成的后果就是这里的文件会越来越多。这让有点洁癖的我,感觉非常的别扭。

在我看来,这个问题很讨厌,比没有智能提示还要讨厌,所以也就有了jQueryPad++。

jQueryPad++把临时文件存放 IE 的临时目录下C:\Users\【用户】\AppData\Local\Microsoft\Windows\Temporary Internet Files 下面,这样只需要清理 IE 缓存文件就可以了,无论是手工还是用 QQ/360 都是很方便的。

既然是尽可能地模仿 jQueryPad,但是由于衣服自己洗的水平有限,还是有很多地方不一样的。

1、移除了顶部的 Tip,这个感觉是个鸡肋,要不要无所谓。好吧,主要是因为不会实现。

2、没有实现按钮、滚动条的颜色和 jQueryPad 的一致。看起来丑了点。

3、将程序主界面的宽度从 800 修改为 1000。

4、临时文件的存放路径发生了变化。

文件最后用 Net Framework 3.5 编译,在运行的时候是需要对应的 Framework 支持的。众所周知的,NET编译的程序,在第一次运行的时候,速度可能会比较慢,之后就好多了。

最后放上下载地址,jQueryPad++绿色版-1.12.31.36,祝大家生活愉快。

分类: 日常 标签: ,

jQueryPad++获取已安装的浏览器

2011年12月29日 没有评论

一直在使用一个叫做 jQueryPad 的软件,这是一个国外的开发者使用 WPF 技术开发的小工具。还是蛮不错的,因为某原因,我决定自己来重写一个类似的功能。

我写的这个名字就叫做 jQueryPad++,界面什么的都尽量模仿那个软件好了。jQueryPad 免费但是不开源,里面有一个功能是列出了已经安装的浏览器,点击可以用对应的浏览器打开,在jQueryPad++里,获取浏览器的实现如下:

代码里定义了一个 GetBrowsers() 方法,该方法返回一个枚举,循环枚举可以获取安装的浏览器了。代码访问注册表的某一位置可以获取到电脑上一些已经安装程序的路径,然后再进行过滤就可以了。

在刚开始的时候,我并不清楚要在注册表的哪个位置去查找,为了让同行以后避免发生这样的情况,同时也为 jQueryPad++ 打个小广告,这里放上代码实现。懒得弄代码高亮了,大家凑活看吧。

protected IEnumerable<Browser> GetBrowsers()         //这里是返回迭代,Browser是一个自定义的类

{

//查找注册表的路径。这个路径我也是看了好久才发现地方的。使用了Registry ,需要添加对应的命名空间。

RegistryKey path = Registry.LocalMachine.OpenSubKey(@”Software\Microsoft\Windows\CurrentVersion\App Paths”);

string[] list = path.GetSubKeyNames();

foreach (string item in list)

{

if (item.StartsWith(“Firefox”, StringComparison.InvariantCultureIgnoreCase)) //检查是否包含Firefox ,比较字符串的时候忽略大小写

{ //如果存在firefox的键,那么默认值保存的就是程序的可执行文件的完整路径,还有一个是 Path 返回的是可执行文件的路径。同时需要注意的是 yield return 的使用,对于返回或者说是获取可迭代类型,需要这么使用,不能直接使用 return ,表明继续进行下一个操作。相关的关键词是 yield break ,表示返回。总之呢有点类似 continue 和 break 的味道。

yield return new Browser(“Firefox”, path.OpenSubKey(item).GetValue(“”).ToString());

}

if (item.StartsWith(“chrome”, StringComparison.InvariantCultureIgnoreCase)) {yield return new Browser(“Chrome”, path.OpenSubKey(item).GetValue(“”).ToString()); }    // 这里和下面是获取 chrome 和 ie ,和上面的方式一样,添加opera 也是相同的道理。

if (item.StartsWith(“IExplor”, StringComparison.InvariantCultureIgnoreCase)){yield return new Browser(“Internet Explorer”, path.OpenSubKey(item).GetValue(“”).ToString());}

}

}

代码到这里,主要的功能已经实现。关于 jQueryPad++ ,等发布的时候我会单独写一个帖子,目前还有一些WPF方面的小问题需要梳理,看来还是没有达到一种语言通,就所有的语言都会的境界。

分类: 日常 标签: , , ,