First, it depends on the timer that you are using. If the timer has a resolution of 1000ms (1 second) then its not guaranteed to fire on the second.
For example, if the timer fires at second #5.5, it may fire again at second 6.6, which rounds up to second #7, so it can skip seconds. You can try increasing your timer resolution to get around this.
The second part to this answer is that windows forms timers are very poor for timing. The best way to do what you are wanting is to check for the passage through the time that you are wanting (set a flag that its before the time, then when that flag is true and its after your trigger time, do your operation).
[Edit] How to do this (even easier because no flag)
public class Form4 : Form
{
DateTime runTime = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 17, 19, 50, 0);
public Form4()
{
InitializeComponent();
timer1.Enabled = true;
}
private void timer1_Tick(object sender, EventArgs e)
{
if (DateTime.Now > runTime)
{
runTime = runTime.AddDays(1);
}
}
}