McCann curled in a brilliant effort from 30 yards to settle a scrappy game, that saw Posh move above Barnsley on goal difference.
Posh were the first to seriously threaten. Chris Kirkland saved well from Lee Tomlin’s drive from the left and the rebound fell for Dwight Gayle who stumbled past the Wednesday goalkeeper but Miguel Llera reacted quickly to clear away from danger.
Nathaniel Mendez-Laing was denied a tap-in in the 22nd minute as Danny Pugh stretched to take the ball off his head and divert away for a corner before Michael Bostwick blazed a free-kick over.
It took Dave Jones’ Wednesday side 27 minutes to test Robert Olejnik, when Giles Coke’s sweetly-struck effort was beaten away by the Austrian keeper.
The visitors caused problems from the following set-pieces and after the hosts had failed to clear a free-kick the ball fell for Seyi Olofinjana but his shot was blocked by Gabriel Zakuani.
Two minutes before the break Gayle was released down the right by Tomlin and the striker skipped past Llera but hit straight at Kirkland.
Jones brought on Kieran Lee on for Rhys McCabe at the break, allowing Chris Maguire to play through the middle alongside Steve Howard, but the switch failed to change the contest’s end-to-end nature.
It was a game lacking in quality but that changed in the 64th minute as McCann’s stuck his free-kick in off the post to give Posh the lead.
Wednesday should have been level two minutes later when hesitation between Olejnik and Zakuani allowed Maguire in but the striker blazed his effort over the bar.
Tomlin was denied from the left when Kirkland saved well at his near post before he got on the end of a Mendez-Laing flick but his shot flew narrowly wide of target.
The Owls wasted a glorious chance when the ball fell for Leroy Lita close to the penalty spot and after his first effort was parried by Olejnik the striker shot the rebound over.
Lewis Buxton went within inches of an equaliser in the 87th minute when his looping cross grazed the far post, before Anthony Gardner headed wide from a corner as the game entered five minutes of stoppage-time.
But Wednesday failed to score and will now need to beat Middlesbrough at Hillsborough next Saturday to ensure their survival.