Ferrari reignited their season as Kimi Raikkonen and Felipe Massa finished first and second at Magny-Cours to end Lewis Hamilton's run of victories.
Raikkonen celebrates his 11th career win in France
But Hamilton, 22, took third place to extend his lead to 14 points at the top of the drivers' standings with his eighth consecutive podium finish.
The Ferrari pair had too much pace for McLaren, with Raikkonen gaining the lead from his team-mate on lap 47.
Britain's Jenson Button came eighth to claim his first point of the season.
Defending champion Fernando Alonso, who started from 10th place after a gearbox failure in qualifying, battled his way to seventh place but still lost ground on his McLaren team-mate in the title race.
Alonso trails Hamilton by 14 points, with Massa a further three points behind and Raikkonen five adrift of the Brazilian.
I don't know what happened, but I saw Kimi flying past
Hamilton started from second on the grid but Raikkonen got off to a lightning start to overhaul the Briton at the first corner.
The Finn called on his superior pace again to get beyond Massa after his second stop on lap 47, overtaking him as he surged out of the pits.
"Finally the start worked for me," said Raikkonen, who chalked up the 11th victory of his career in France, and his first since his opening day win in Australia.
"I tried to push Felipe, I knew I would stop later and I managed to get ahead of him in the end.
"I expected to go through difficult times and people always think you have lost it if you're not winning, so it's nice to win."
Massa, who started on pole, had amassed a three-second lead over Raikkonen just before his second stop but his chances faded when he got held up by the back-markers.
Raikkonen claimed his second win for Ferrari in France
"I lost the race because of the traffic," said Massa. "I lost too much time and speed, and that was the biggest problem for me.
"But the car is great and we are happy to get the first one-two of the season for Ferrari."
Hamilton made a sluggish start and, on an unusual three-stop strategy, never really threatened the Ferraris.
However, the British rookie showed his class when he jinked past Robert Kubica at the tight Adelaide Hairpin to regain third after his second stop.
It still says a lot for Hamilton that this result in Magny-Cours was his worst since he was third on his debut in Melbourne, following four successive runner-up places and back-to-back wins in Canada and the United States.
"I didn't get off to the best start," said Hamilton. "I don't know what happened, but I saw Kimi flying past.
"But I'm still feeling fairly confident, and as long as we continue to have reliability, then I can look forward to my home race."
His team-mate Alonso will also be looking for a fresh start after a frustrating French race.
The Spanish double world champion did well to battle back to seventh from 10th on the grid, his hopes stymied by a strategy based on the belief that he would be starting from the front of the grid.
But Alonso will nevertheless be disappointed to finish behind Nick Heidfeld and Giancarlo Fisichella after overtaking both of them during the race.
Button will go to next weekend's British Grand Prix with renewed confidence after claiming Honda's first point of the season, following extensive upgrades to his car.
The 27-year-old Briton said: "It's a good result but we're not getting too excited yet as it is only one point, but it's a good base to build on."
David Coulthard finished 13th for Red Bull while Anthony Davidson, the fourth Briton in the field, retired his Super Aguri after tangling with Vitantonio Liuzzi on the first lap.
Jarno Trulli's race also came to an end in an incident-packed opening lap when he ran into Heikki Kovalainen's Renault and sent him spinning.
That was bad news for Kovalainen, who finished 15th after qualifying in sixth.
It was a much better day for Kubica, who claimed fourth in his first race back after his high-speed crash in Canada.
Results from the French Grand Prix at Magny-Cours:
1. Kimi Raikkonen (Fin) Ferrari 1hr 30min 54.200
2. Felipe Massa (Brz) Ferrari +00:02.414
3. Lewis Hamilton (GB) McLaren-Mercedes 00:32.153
4. Robert Kubica (Pol) BMW Sauber 00:41.727
5. Nick Heidfeld (Ger) BMW Sauber 00:46.801
6. Giancarlo Fisichella (Ita) Renault 00:52.210
7. Fernando Alonso (Spa) McLaren-Mercedes 00:56.516
8. Jenson Button (GB) Honda 00:58.885
9. Nico Rosberg (Ger) Williams-Toyota 01:08.505
10. Ralf Schumacher (Ger) Toyota 1 lap
11. Rubens Barrichello (Brz) Honda 1 lap
12. Mark Webber (Aus) Red Bull-Renault 1 lap
13. David Coulthard (GB) Red Bull-Renault 1 lap
14. Alexander Wurz (Aut) Williams-Toyota 1 lap
15. Heikki Kovalainen (Fin) Renault 1 lap
16. Takuma Sato (Jpn) Super Aguri-Honda 2 laps
17. Adrian Sutil (Ger) Spyker-Ferrari 2 laps
r. Scott Speed (US) Toro Rosso-Ferrari 15 laps
r. Christijan Albers (Ned) Spyker-Ferrari 42 laps
r. Anthony Davidson (GB) Super Aguri-Honda 69 laps
r. Jarno Trulli (Ita) Toyota 69 laps
r. Vitantonio Liuzzi (Ita) Toro Rosso-Ferrari 70 laps
r = retired
Fastest Lap: Felipe Massa, 1:16.099, lap 42.