【发布时间】:2016-04-08 16:28:03
【问题描述】:
我有一个正在测试的程序 - 仅在几个桌面上运行 - 在 Windows 启动时有时会出现非常奇怪的行为。
程序以此开头:
public frmClient()
{
_version = ApplicationDeployment.IsNetworkDeployed ? ApplicationDeployment.CurrentDeployment.CurrentVersion : _version;
_nicText = string.Format("My Program ({0})", _version.ToString());
Logger.LogToFile(string.Format("Startup - Build: {0}, Major: {1}, MajorRevision: {2}, Minor: {3}, MinorRevision: {4}, Revision {5}",
_version.Build,
_version.Major,
_version.MajorRevision,
_version.Minor,
_version.MinorRevision,
_version.Revision));
InitializeComponent();
}
表单实际上开始最小化到系统托盘,并在加载中使用_nicText设置通知图标的工具提示如下:
private void frmClient_Load(object sender, EventArgs e)
{
try
{
Logger.LogToFile("frmClient.frmClient_Load");
nicMain.Text = _nicText + " - NOT CONNECTED";
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
Logger类如下:
public static class Logger
{
public static void LogToFile(string LogMessage)
{
StreamWriter log;
if (!File.Exists("logfile.txt"))
{
log = new StreamWriter("logfile.txt");
}
else
{
log = File.AppendText("logfile.txt");
}
log.WriteLine(DateTime.Now.ToString("yyyyMMddHHmmss") + " - " + LogMessage);
log.Close();
}
}
如果我在本地运行程序,我会得到 (0.0) 的版本信息,否则我会得到一个完整版本(目前是 1.0.0.31)
但是,有时在启动时我会让用户显示 (0.0) 作为版本,在这些情况下,日志文件中没有写入任何内容。
目前我唯一的猜测是应用程序在 Windows 准备好之前启动(只是一个盲目的猜测)。这会发生吗?如果是这样,我有什么办法可以推迟到 Windows 准备好?我还缺少其他东西吗?
【问题讨论】:
-
这里的答案有帮助吗? stackoverflow.com/questions/5332544/…
-
故意显示 (0, 0) 不是很有用。一些用户发现,当他们从网络位置复制 exe 时效果更好:) 丢失日志文件条目往往是因为他们复制旧版本或吞下异常。
-
我怀疑没有任何内容写入日志文件,因为您查看的目录错误。 (您的日志文件名不包含路径,因此它会在当前目录中创建。)
-
@HansPassant 就是这样。启动是直接运行exe。如果您将此添加为答案,我会标记它。
标签: c# startup system-tray