所以我有一个在Windows平台上运行的C程序,它定期发送日志文件的电子邮件,它应该在后台运行而不会受到干扰。我不想让电子邮件地址保持不变。
有哪些方法可以在此程序中输入电子邮件地址?
我在考虑一个简单的脚本,它只接受电子邮件地址,主题等参数。然后让脚本生成一个文本文件,其标签与标签相同:
到电子邮件地址 来自电子邮件地址 SUB sub
然后让我的程序读取这些值并将它们分配给符号变量。而不是删除配置文件。
还有其他什么方法?
答案 0 :(得分:4)
其他一些方法是:
使用注册表适用于多种配置信息。通过在注册表中选择一个合适的位置,您可以在系统范围内进行一些配置,为每个用户进行一些配置(这听起来不像您的应用程序,但无论如何我会提到它),或两者的任意组合。 Windows管理数据的存储,并为用户编辑它提供了一种基本方法(regedit.exe
)。
使用注册表会使同时使用不同选项运行多个程序实例变得更加困难。
您可以将配置信息存储在磁盘上的文本文件中。这允许您将配置保存在与可执行文件相同的位置(相同文件夹),这使得查找更容易(使用注册表时,您必须告诉用户在哪里查看)。通常可以使用常规文本编辑器编辑配置文件。但是,通常您必须指定要使用的格式以及读取和解析文本文件,并在需要时处理语法错误。
此方法允许您轻松运行程序的多个实例,每个实例都有自己独立的配置文件(例如,如果您的应用程序在其自己的目录中查找配置文件)。
您的程序可以从命令行读取其配置信息,但您仍然必须将数据存储在其他位置。命令行在笨拙之前只能支持有限数量的信息。
您的程序可以从环境变量中读取其配置信息。这些变量可能是由运行程序的脚本设置的变量(其中您遇到与命令行选项相同的问题,数据仍必须存储在其他位置),或者可能是系统提供的全局设置环境变量。 Windows为改变全球环境提供了非常原始的工具,甚至比regedit
更难以访问。 Windows上不经常使用此选项。
这是一项高级技术,需要与将数据放入共享内存的其他程序合作。而且,与许多其他选择一样,数据必须首先存储在其他位置。除非你确实知道你需要,否则不推荐。
答案 1 :(得分:3)
在这里戴上我的横向思维帽...... 您如何使电子邮件地址保持不变(或可配置,但无论如何),但使其成为列表地址。让您的邮件服务器管理列表的订阅。现在你的程序做了(收集日志)的好处,邮件服务器通过它们之间的一个非常小的接口(列表地址)做了它(分发电子邮件)的好处。
每次需要在日志收件人列表中添加/删除某人时,在某处编辑一些模糊的配置文件或注册表项可能不是处理此问题的最佳方法。
答案 2 :(得分:2)
您也可以使用Windows注册表。
答案 3 :(得分:1)
有没有理由你不能修改程序只是读取你在启动时可以传递的参数列表并将你设置为“to”和“from”?
示例:program.exe email@address.com email2@address2.com
答案 4 :(得分:0)
注册表! :-P
答案 5 :(得分:0)
我自己住在一个Linux世界,所以我有管道来处理这种情况,但我听说过在Windows上完成以下操作:
可以使用API控制其他窗口的GUI元素(或控件),例如填写To,From和Data字段,然后将按下的事件发送到简单电子邮件程序的按钮。鬼鬼祟祟的部分是在后台发生这种情况。再次使用API可以使电子邮件程序的窗口具有“隐藏”状态,使其不可见。隐藏的窗口仍然可以操纵它们的手柄,就好像它们是正常的窗口一样。
所以这应该会给你在windows中对程序进行后台控制的效果,我知道它已经完成但是我从未亲自查看过它。它似乎不是世界上最有效的,但它是一个很酷的技巧。 :)
答案 6 :(得分:0)
我个人会使用Boost.Program_options,这将允许您拥有配置文件或命令行参数(或两者!) - 尽管您标记了此C / C ++,而Boost仅适用于C ++。 尽管如此,在C中配置文件和fscanf它应该不难。还有argc和argv。
答案 7 :(得分:0)
您的程序可以打开套接字并通过套接字接受数据。那么你至少需要一个具有一定安全性的简单协议。您可能还需要编写某种类型的客户端。根据您的描述,我建议提供其他一个答案,但对于某些情况,这可能是一个可行的选择。