Desharnais, the third shooter for Montreal, slammed on the brakes at the top of the crease before sliding the puck by Marc-Andre Fleury.
Daniel Briere scored twice, once on the power play, and Max Pacioretty also scored with the man advantage, his 27th of the year. Brendan Gallagher netted his 15th for the Canadiens and Alexei Emelin also scored his second of the season.
Crosby, who leads the NHL with 80 points, scored his 29th and added an assist.
James Neal, Deryk Engelland, Olli Maatta and Brandon Sutter also scored for the Penguins.
JETS 3, COYOTES 2, SO
In Winnipeg, Manitoba, Olli Jokinen scored the shootout winner and Winnipeg edged Phoenix.
Bryan Little and Blake Wheeler scored in regulation for the Jets, who continued their winning ways under new head coach Paul Maurice. The Jets are 10-3-1 since Maurice replaced the fired Claude Noel.
Oliver Ekman-Larsson and Martin Hanzal scored for Phoenix in the first game for both teams after a 19-day break for the Winter Olympics.
Jets forward Devin Setoguchi also beat Mike Smith in the shootout and Antoine Vermette was the only Coyotes player to get one past Ondrej Pavelec in four rounds of penalty shots.
Winnipeg pulled within one point of the Coyotes as both teams chase a wild-card playoff spot, although Phoenix have two games in hand.
ISLANDERS 5, MAPLE LEAFS 4, OT
In Uniondale, New York, Lubomir Visnovsky scored 1:55 into overtime and New York outlasted Toronto in a wild game.
Visnovsky’s winner came after Anders Lee scored two tying goals for the Islanders in a seesaw third period in which the teams combined for five goals in a nine-minute span.
Evgeni Nabokov made 18 saves for New York, who improved to 5-1-2 in their past eight games against Toronto.
Joffrey Lupul put Toronto ahead 4-3 with just over six minutes left in the third before Lee knotted the score at 17:20 with his second of the game. Lupul’s 18th of the season at 13:54 came just over a minute after Lee tied it at three with his first of the season.
Lee’s power-play goal came after Dion Phaneuf had put Toronto ahead 3-2 at 11:26.
Paul Ranger and Phil Kessel also scored for Toronto, while Michael Grabner had two short-handed goals for the Islanders 48 seconds apart in the first period.
In other play, it was:
‧ Capitals 5, Panthers 4
‧ Stars 4, Hurricanes 1
‧ Wild 3, Oilers 0
‧ Devils 5, Blue Jackets 2
‧ Predators 3, Lightning 2