Weening, a 24-year-old rookie, and Andreas Kloden of Germany were involved in a two-man sprint to the finish. Weening's lunge forward before the line proved to be the difference as the Dutch rider finished in a time of 5:03:54 with Kloeden, last year's Tour runner-up, taking second.
Alejandro Valverde of Spain was third.
Armstrong won his fifth consecutive yellow jersey by staying with the pack and increased his lead by five seconds -- a minute overall -- over German Jens Voigt of Team CSC.
Saturday's stage began in Pforzheim, Germany, then headed back into France and ended in Gerardmer.
Voigt jumped ahead of Alexandre Vinokourov of Kazakhstan by two seconds to trail Armstrong. American Bobby Julich trails the leader by one minute, two seconds.