开机自启动

自启动程序是指在系统启动时自动运行的程序。这些程序可能会影响系统的启动速度和性能,因此了解如何获取和管理这些程序是非常重要的。本文将介绍一种使用 Python 实现的方法,通过调用系统命令和处理 CSV 文件来获取自启动程序的信息。

windows代码实现

确定 autorunsc 程序的名称:

1
autorunsc_name = "autorunsc64.exe" if platform.architecture()[0] == "64bit" else "autorunsc32.exe"

这行代码根据当前系统的架构(64 位或 32 位)来确定 autorunsc 程序的文件名。
终止正在运行的 autorunsc 进程:

1
2
3
4
5
6
7
8
9
10
11
for process in psutil.process_iter():
try:
name = process.name()
except:
name = ""
try:
if name == autorunsc_name:
process.terminate()
except Exception as e:
setting.log.error("终止垃圾进程失败,原因: {}".format(str(e)))
return

这段代码遍历所有正在运行的进程,尝试终止名为 autorunsc 的进程,以确保没有其他实例在运行。

执行 autorunsc 命令并保存结果到临时文件:

1
2
3
autoruns_path = os.path.join(setting.PROJ_PATH, autorunsc_name)
result_temp_path = os.path.join(setting.PROJ_PATH, 'res_h.csv')
os.system("{} /accepteula -a h -s -h -ct > {}".format(autoruns_path, result_temp_path))

这行代码执行 autorunsc 命令,并将结果保存到一个临时的 CSV 文件中。

处理 CSV 文件中的数据:

1
2
3
4
5
with open(result_temp_path, "rt", encoding="UTF-16") as f:
for row in csv.DictReader(f, delimiter="\t"):
clean_data = get_line(self, row, self.display_list)
data = json.dumps(clean_data, ensure_ascii=False)
write_file(self.file, data)

这段代码打开临时 CSV 文件,逐行读取数据,并使用 get_line 函数处理每一行数据。处理后的数据被转换为 JSON 格式,并写入到输出文件中。

删除临时文件:

1
os.remove(result_temp_path)

最后,这行代码删除临时 CSV 文件,以保持文件系统的整洁。

这个方法通过调用 autorunsc 命令获取 Windows 自启动程序的信息,并将这些信息处理后写入到指定的文件中。

Linux代码实现

下面是对代码的详细解释:
执行 systemctl list-unit-files 命令并获取结果:

1
res_list = exe_cmd("systemctl list-unit-files").split("\n")

这行代码执行 systemctl list-unit-files 命令,并将结果按行分割成列表。

遍历结果列表,处理每一行数据:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
for line in res_list[1:-2:]:
try:
line = line.split()
if len(line) == 3:
name, state, _ = line
else:
name, state = line

source_data = {
"Name": name,
"State": state
}
clean_data = get_line(self, source_data, self.display)
data = json.dumps(clean_data, ensure_ascii=False)
write_file(self.file, data)
except Exception as e:
setting.log.error(str(e))

这段代码遍历结果列表,跳过第一行和最后两行,因为它们不包含服务信息。对于每一行数据,它尝试将其分割成两部分或三部分(取决于是否有额外的信息),然后将服务名和状态保存到 source_data 字典中。接着,它调用 get_line 函数处理 source_data,并将处理后的数据转换为 JSON 格式,最后写入到输出文件中。如果在处理过程中遇到异常,它会记录错误信息。