Stuart Broad took 5-37 on his return from injury to snatch victory from the jaws of defeat as Rizman CheemaÃ¢â‚¬â„¢s 93 took Canada to within sight of EnglandÃ¢â‚¬â„¢s 243.
Matt Prior rescued the England innings with 78 alongside Jonathan Trott, who passed 50, as EnglandÃ¢â‚¬â„¢s other batsman failed to fire in what was a stuttering start to their World Cup campaign.
After electing to bat, skipper Andrew Strauss was caught behind for just 1 before surprise opening partner Kevin Pietersen and Trott took the score to 50.
But Pietersen went immediately after and his dismissal sparked a worrying middle order collapse as both Ian Bell and Paul Collingwood fell in single figures.
Prior’s arrival at the crease alongside Trott temporarily steadied the ship. Their partnership reached 54 when Trott was caught, triggering another flurry of wickets as Sussex pair Michael Yardy and Luke Wright fell in quick succession to Henry Osinde.
However, Broad was on hand to offer some much-needed support to Prior and the pair put on what proved to be a vital 51-run stand.
James Tredwell and Ajmal Shahzad provided some momentum in the final overs as both reached double figures before England lost their last wicket in the final over.
Broad and Shahzad then tore through Canada’s top order to leave them reeling at 28-5, but Cheema began his demolition of the English attack with steady help from his fellow lower order.
He peppered the boundary with 10 fours and 5 sixes to fire Canada to 156 before Broad returned to remove him.
But Khurram Chohan, Hiral Patel and Harvir Baidwan calmly took Canada ever closer to the target before Broad struck again to take the final wicket of Chohan for 44 and spare Engand’s blushes.
England face Pakistan on Friday in their final warm-up match before their tournament-opener against the Netherlands on Tuesday.
MORE: The latest football news
MORE: The latest tennis news
BIOGRAPHY: Georginio Wijnaldum