For 90 minutes the game looked destined to end without a goal, but then Dion Dublin headed David Marshall's long kick to Darel Russell 22 yards from goal. He chested the ball onto his left foot and turned to hit a volley past Andy Lonergan's despairing dive to his right.
The spectacular finish was out of character with what had gone before, but deserved to win any game.
Norwich kicked off attacking the Barclay End goal, but Preston had the best of the early exchanges with Karl Hawley proving a handful for the City defenders.
After 11 minutes Ched Evans fired into the side-netting from an acute angle before Callum Davidson limped off and was replaced by Matt Hill.
Norwich did more attacking in the first five minutes of the second half than at any time in the first 45 minutes. Evans, Dublin, Gary Doherty and Jason Shackell all had shots in quick succession.
Loan signing Matthew Bates made his Canaries debut as a replacement for Jon Otsemobor and immediately put in two useful crosses from the right.
Just after the hour Lee Croft beat Billy Jones on the Preston left but Ryan Bertrand could not hit the target from six yards when the Norwich right-winger drilled in an inviting low cross.
At the other end Shackell used his head to block a shot from Paul McKenna, before Lonergan pulled off an acrobatic save to keep out a snap-shot from substitute Jamie Cureton.
Five minutes from time Doherty got his head to Mark Fotheringham's right-wing corner but the ball went over via the top of the bar before Marshall did well to block an angled drive from substitute Brett Ormerod.
Once again Lonergan moved quickly to block a shot from Cureton but could do nothing to prevent Norwich taking the points thanks to Russell's wonder strike.