HOUSTON -- Jason Castro and Chris Carter homered in the fourth inning to give Houston the lead and the Astros held on for their third straight win, 4-3 over the White Sox on Saturday night.
The game was tied 1-1 when Castro launched a solo homer into the bullpen in right-center to start the fourth inning. Carter's one-out homer clanged off the foul pole in left field to extend the lead to 3-1 and leave starter John Danks (1-3) shaking his head. It was the team-leading 14th homer for Carter, who also leads the Astros with 36 RBIs.
Brandon Barnes drove in a run with a double in the fifth inning to make it 4-1.
Adam Dunn hit his 18th homer to start the White Sox seventh and Gordon Beckham's ground-rule double later in the inning made it 4-3.
Harrell (5-7) allowed seven hits and three runs with a season-high seven strikeouts in 6 2-3 innings.
Danks yielded five hits and four runs in six-plus innings.
The White Sox had runners at the corners with two outs in the eighth inning, but pinch-hitter Jeff Keppinger grounded into a force out to end the threat.
Jose Veras pitched a scoreless ninth for his 13th save. He allowed a walk to start the ninth, but picked off pinch-runner Jordan Danks at second to end the game.
The White Sox have dropped 11 of their last 12 on the road.
Alexei Ramirez singled with one out in the first and stole second base. The White Sox took a 1-0 lead on a two-out RBI single by Paul Konerko.
Harrell settled down after that, retiring the next 11 batters he faced. Chicago's next hit came when Beckham singled with one out in the fifth inning. But Harrell still faced the minimum in that inning after Tyler Flowers grounded into a double play.
He threw a 1-2-3 sixth inning before running into trouble in the seventh. Dunn's sixth homer this month landed in the Crawford Boxes in left field to cut the lead to 4-2.
Conor Gillaspie singled with one out and took second on an error by right fielder Trevor Crowe on the play. A ground-rule double by Beckham with two outs got Chicago within 4-3.
Flowers singled to chase Harrell. He was replaced by Paul Clemens, who struck Alejandro De Aza to limit the damage.
Danks plunked Carlos Pena with two outs in the second inning to end a career-long streak during which he retired 26 consecutive batters. Ronny Cedeno followed with a double that scored Pena to tie it at 1-all. The double was the first extra-base hit Danks had allowed in 12 2-3 innings.
He got back on track after that and sat down the next four batters, with two strikeouts, causing frustration among Houston's hitters. Jose Altuve threw his bat angrily when he struck out on a full-count to end the third inning.
Matt Dominguez singled down the left field line to start Houston's fifth. A run-scoring double by Barnes with one out that rolled into the corner of right field pushed Houston's lead to 4-1.
NOTES: De Aza was back in the lineup a night after sitting out with a stomach ailment. ... The series continues on Sunday when Chicago's Hector Santiago opposes Dallas Keuchel.