EuhatWorkTrace任务栏图标不见了

任务栏属性-〉通知区域-〉自定义,找到Expert/Euhat Work Trace图标,行为下拉框中选择“显示图标和通知”,确定保存,这样任务栏里WorkTrace图标就又显示出来了。

还有一种情况,当explorer.exe进程重启后,Euhat Work Trace或Euhat Expert通知区域的小图标也会消失,这时,要么双击程序exe,要么退出程序再启动。

win32将当前目录切换到程序所在目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int pathGetContainer(const char *path, string &dir)
{
	const char *p;
	for (p = path + strlen(path); p >= path; p--)
	{
		if (*p == '/' || *p == '\\')
			break;
	}
	dir = string(path).substr(0, p - path + 1);
	return 1;
}
 
...
	char curPath[1024];
	GetModuleFileNameA(AfxGetApp()->m_hInstance, curPath, sizeof(curPath));
	string curDir;
	pathGetContainer(curPath, curDir);
	SetCurrentDirectoryA(curDir.c_str());
...

注:此方法对于Windows shell编程不适用,因为是运行在资源管理器进程里的插件,返回的都是explorer.exe所在路径,此种情况下,一般是通过注册表里写死的配置获取进程路径。

DeleteFile 5 unlink EACCES

查了很多网页,有的说是要删除的文件存在打开的句柄未关掉。而我这种情况是在程序一开始DeleteFile删除某个文件就删不掉,报ERROR_ACCESS_DENIED的错,换成_unlink删也删不掉。

但我在同样的目录新建一个文本文件再DeleteFile此文本文件是可以删除的。

于是我怀疑是不是有钩子进程使坏,我将“QQ电脑管家”程序退出,结果就可以成功调用DeleteFile了。

也就是说,“QQ电脑管家”阻止了DeleteFile删除某些特定后缀的文件,比如jpg后缀的文件。

printf Stack overflow

可能原因是栈空间用光了,需要仔细检查上下文中,看有没有存在占很大空间的局部变量。有的话,改为堆上分配这些变量。

命令行可以执行nohup后却不能执行

有一个脚本/root/kill.sh:

1
2
3
4
5
#!/bin/sh
while [ 1 ]; do
	sudo kill -9 `pidof java`
	sleep 10
done

在命令行执行很正确,能隔一段时间把所有的java进程都杀掉了。
但执行:

1
nohup /root/kill.sh &

现象就很奇怪了,有时候能杀掉所有java进程,有时候不干活,java进程依然存在,让人怀疑人生。
无意中打开nohup.out发现有输出:
sudo没有与之关联的会话。
于是,修改kill.sh,把kill之前的sudo去掉就正常了。