"The team needed it," said Haren (4-1), who allowed only seven hits and one walk. "I needed it."
Haren struck out the side in the first inning and kept it coming. Through three innings, Haren had struck out seven of the 10 batters he had faced. He was effective with his cutters and split-finger fastballs.
"Same thing I always do," said Haren. "I just had better stuff tonight. I knew early I had good stuff. I had all those strikeouts early.
"I knew their game plan was to be real aggressive. Once they saw I had good stuff, they came out swinging. I made some quality pitches and kept the ball down."
Haren also contributed to the team's offensive production that started with Kelly Johnson opening the game with a home run off Astros starter Wandy Rodriguez (1-4), who lasted only 3 2/3 innings. Haren's fourth-inning double was one of 13 hits for the D-backs.
Abreu made his seventh start of the season and fourth at shortstop. He had hits in his first three at-bats, including a run-scoring double in the fourth that gave the D-backs their biggest lead at 5-0.
"It was a good game for the team and for me," said Abreu. "I just have to be ready to come in and play when needed."
Abreu was involved in the turning of two double plays and his slick fielding and throwing prevented a couple of would-be hits.
"I don't know whether to compliment him for his hitting or for his fielding," said Arizona manager A.J. Hinch.
Haren came into the game batting .500. He went 1-for-4 and flied out twice to center. His double extended his hitting streak to six games.
Johnson, Adam LaRoche and Chris Young had two hits each for the D-backs.
The Astros scored twice in the fourth and once in the eighth. In the fourth, Carlos Lee singled in Jeff Keppinger, who had led off the inning with a double. Lee scored on Geoff Blum's two-out single. In the eighth, the Astros loaded the bases with no outs.
Haren then induced Keppinger to hit into a 4-6-3 double play that scored Humberto Quintero, who had led off the inning with a double. Haren then got Lee on a groundout to end the inning.
Blum (2-for-4) was the only Astro to have more than one hit off Haren.
"He was really good early," said Astros first baseman Lance Berkman, who was 0-for-4 and had his batting average drop to .196. "I didn't think he was great later in the game, but he competes, so his repertoire is pretty good and early, he was really sharp.
"I thought for the first four of five innings, he was excellent, and then he may have gotten tired. But he kind of lost some command and guys started to hit the ball a little bit better. We played a good ballgame against a pretty tough pitcher and just came up short."
It was Haren's first complete game of the season. He also threw one against the Astros last year in an 8-1 D-backs win.
Haren was pleased on going the nine innings.
"They're not easy to come by," he said. "To get one is special. It feels good to come off the mound and feel like you accomplished something."
"He was just being Dan Haren tonight," said Hinch. "It was a good effort. He had a lot of action on his pitches. A Dan Haren performance. It's the best he's been this year."
Haren also felt it was his best start of the season. And he had a hunch he was going to pitch well.
"I was going right after them with quality stuff," said Haren. "I felt great. The best I've felt since early spring. I had a good week of work. I didn't change anything in particular.
"I had a good feeling about it a couple days ago. Hopefully, this is a sign of good things to come."
It was all good Thursday for Arizona, and right from the start. Johnson opened the game with a home run to left off Rodriguez on the third pitch of the contest, sending a 91-mph fastball from the left-hander into the Crawford Boxes.
It was Johnson's seventh career leadoff home run and second this season (April 7 at San Diego).
Rodriguez, the first of five Astros pitchers, allowed five runs on nine hits with four strikeouts and one walk.