Weening, who has come close to claiming a first big win all season, held off Germany's Andreas Kloden of T-Mobile in a two-man sprint which was decided by a photo finish -- although it must have been one of the closest in the race's history.
Both riders came over the finish line of the 231.5km stage, held between Pforzheim in Germany and here in the hilly Vosges region, at practically the same time although it was a few minutes before officials declared the winner.
"I didn't even know I'd won," said a delighted Weening, who had shown his determination throughout the day by getting involved in an early breakaway before attacking at the start of the day's last climb.
"I felt really strong, that's why I wanted to attack. There was no point in me waiting for the guys behind me to do it. "It's great. I can't believe it," added Weening, who admitted it had come close to being one of the best days of his life.
"It's one of the best days anyway. This year I've been really close (to winning) but this time I finally did it."
Around 27 seconds later Armstrong came over the finish line among a small bunch of riders, including most of his main challengers, to retain his 1:02 lead over Alexandre Vinokourov of the T-Mobile team, who sits in third place just behind CSC's Jens Voigt, who is at 1:00.Robert Laberge/Getty Images Winner Pieter Weening of Rabobank barely finishes ahead of T-Mobile's Andreas Kloden
Jan Ullrich is slightly further back at 1:36, while Italian Ivan Basso -- another yellow jersey contender -- is one place ahead of Germany's 1997 race winner at 1:26 behind Armstrong.
On the first real climbing day of the race, however, Vinokourov gave a glimpse of what could be in store for Armstrong in the coming days.
The 31-year-old Kazakh, who placed third overall in 2003 but missed the race through injury last year, attacked on the climb of the Col De la Schlut in a bid to drop Armstrong, or at least see how the American would react to an attack.
Armstrong, who is bidding for a seventh consecutive yellow jersey, responded immediately, and moments later Vinokourov was back among a group which contained mostly all of the race contenders, although strangely no one else from his Discovery Channel team.
Ullrich, Roberto Heras (Liberty), Alejandro Valverde (Baleares) and Brad McGee of the Francaise des Jeux team were all there, and shortly after Vinokourov had been brought back his T-Mobile teammate Kloden decided to go in search of stage leader Weening.
Weening had attacked earlier on with a group of riders whom he upped and left on the first slopes of the Schlut climb, however the Dutchman was caught by Kloden just before the summit of the first category two climb of the race -- which was around 15km from the finish.
Together both riders descended furiously in a bid to keep the chasers at bay, but it wasn't long before Armstrong's group had closed the gap.
With only 10km to go to the stage finish, Kloden -- who began the stage at 2:29 behind Armstrong in the general classification -- only held a 10-second lead on the group.
However the two leaders raced hard to the finish line. In the two-man sprint, Weening -- who had a look of shock on his face when Kloden passed him at the summit minutes earlier -- took his revenge on the German to claim a well-won stage.
Top 10 results, Stage 8: Pforzheim, Germany - Gerardmer (231.5 km)
1. Pieter Weening (NED/RAB) 5:03:54
2. Andreas Kloden (GER/MOB) at 0:00
3. Alejandro Valverde (SPA/BAL) 0:27
4. Kim Kirchen (LUX/FAS) 0:27
5. Jens Voigt (GER/CSC) 0:27
6. Jan Ullrich (GER/MOB) 0:27
7. Cadel Evans (AUS/DAV) 0:27
8. Christophe Moreau (FRA/C.A) 0:27
9. Christopher Horner (USA/SDV) 0:27
10. Alexander Vinokourov (KAZ/MOB) 0:27
Stage 8: Complete results
Top 10, Overall standings
1. Lance Armstrong (USA/DIS) 28:06:17
2. Jens Voigt (GER/CSC) at 1:00
3. Alexander Vinokourov (KAZ/MOB) 1:02
4. Bobby Julich (USA/CSC) 1:07
5. Ivan Basso (ITA/CSC) 1:26
6. Jan Ullrich (GER/MOB) 1:36
7. Carlos Sastre (SPA/CSC) 1:36
8. George Hincapie (USA/DIS) 1:47
9. Andreas Kloden (GER/MOB) 1:50
10. Floyd Landis (USA/PHO) 1:50
Stage 8: Complete overall standings
Stage 8: Category standings