Re: Using NSTask to execute softwareupdate

sunfire <[email protected]> Fri, 16 Sep 2011 08:29:22 -0700 (PDT)
Newsgroups gmane.comp.macosx.devel
Message-ID <[email protected]>
Hi Colin,
I'm having the same issue and I have been unsuccessful in fixing it. Did you
ever resolve this?

Thanks,
Charles


Colin Swelin wrote:
> 
> Hi,
> 
> Sorry for the long reply. I  gave this a try and it looked promising,
> however, the task still hangs at the "writing files" step of few patches.
> It's reading the buffer correctly, as its output everything up to that
> point.
> 
> Anyone have any insight to why the 10.6.6 update does this?
> 
> Thanks again,
> Colin
> 
> On 2011-01-08, at 1:27 PM, Tom Jones wrote:
> 
>> The problem is the use of "waitUntilExit" the buffer is filling up. 
>> 
>> Try something like this...
>> ( You might have to clean some of it up :-) )
>> 
>> Tom
>> 
>> - (void)runTask:(NSDictionary *)patch
>> {
>> NSTask *task = [[NSTask alloc] init];
>> [task setLaunchPath: @"/usr/sbin/softwareupdate"];
>> [task setArguments:[NSArray arrayWithObjects:@"-i", [patch
>> objectForKey:@"patch_identifier"], nil]];
>> [task setEnvironment:[NSDictionary dictionaryWithObject:@"1"
>> forKey:@"COMMAND_LINE_INSTALL"]];
>> 
>> NSPipe *install_pipe = [NSPipe pipe];
>> [task setStandardOutput: install_pipe];
>> [task setStandardError: install_pipe];
>> 	
>> NSFileHandle *file = [install_pipe fileHandleForReading];
>> 
>> 
>> [[NSNotificationCenter defaultCenter] addObserver: self
>> 										 selector: @selector(taskEnded:)
>> 											 name: NSTaskDidTerminateNotification
>> 										   object: file];
>> 
>> [[NSNotificationCenter defaultCenter] addObserver: self
>> 										 selector: @selector(readFromTask:)
>> 											 name: NSFileHandleDataAvailableNotification
>> 										   object: file];
>> 
>> [file readInBackgroundAndNotify];
>> [task launch];
>> [task release];
>> }
>> 
>> 
>> - (void)readFromTask:(NSNotification *)aNotification
>> {
>>  NSData *data = [[aNotification userInfo] objectForKey:
>> NSFileHandleNotificationDataItem];
>>  if ([data length]) {
>>  	/* Process data */
>>  	[[aNotification object] readInBackgroundAndNotify];
>>  }
>> }
>> 
>> - (void)taskEnded:(NSNotification *)aNotification
>> {
>> 	// Task is full complete
>> 	[[NSNotificationCenter defaultCenter] removeObserver:self];
>> }
>> 
>> 
>> 
>> On Jan 8, 2011, at 9:59 AM, Colin Swelin wrote:
>> 
>>> Here's the basic NSTask stuff:
>>> 
>>> 
>>> 			NSPipe *pipes = [NSPipe pipe];
>>> 			NSTask* patchInstall = [[NSTask alloc] init];
>>>                        [patchInstall
>>> setLaunchPath:@"/usr/sbin/softwareupdate"];
>>> 			[patchInstall setArguments:[NSArray arrayWithObjects:@"-i", [patch
>>> objectForKey:@"patch_identifier"], nil]];
>>> 			
>>> 			[patchInstall setStandardOutput: pipes];
>>> 
>>>                        NSFileHandle *file = [pipes
>>> fileHandleForReading];
>>> 			
>>> 			[patchInstall launch];
>>> 			
>>> 			NSData *data = [file readDataToEndOfFile];
>>> 			
>>> 			[patchInstall waitUntilExit];
>>> 
>>> 
>>>                          ......
>>>                       [patchInstall release];
>>> 
>>> 
>>> So i'm waiting for the task to complete, then I do my thing with the
>>> results. 
>>> 
>>> Thanks,
>>> Colin
>>> 
>>> On Sat, Jan 8, 2011 at 12:48 PM, Tom Jones <[email protected]> wrote:
>>> Hi Colin,
>>> I would need to see your NSTask code, to really know. Are you using
>>> notifications as data becomes available or are you waiting until the
>>> task has completed?
>>> 
>>> 
>>> Thanks,
>>> tom
>>> 
>>> 
>>> On Jan 6, 2011, at 8:54 AM, Colin Swelin wrote:
>>> 
>>>> Hi,
>>>> 
>>>> I"m currently using NSTask to execute softwareupdate to install
>>>> patches, however, there's a few patches that seem to hang when trying
>>>> to install. For example, the latest 10.6.6 update and a older iTunes
>>>> patch, everything else seems to work perfectly fine.
>>>> 
>>>> Anyone have any clues to why this might happen? I've set the
>>>> "COMMAND_LINE_INSTALL" environment variable to 1, so i'm a little
>>>> confused to why this is happening.
>>>> 
>>>> Thanks._______________________________________________
>>>> MacOSX-dev mailing list
>>>> [email protected]
>>>> http://www.omnigroup.com/mailman/listinfo/macosx-dev
>>> 
>>> 
>> 
> 
> _______________________________________________
> MacOSX-dev mailing list
> [email protected]
> http://www.omnigroup.com/mailman/listinfo/macosx-dev
> 
> 

-- 
View this message in context: http://old.nabble.com/Using-NSTask-to-execute-softwareupdate-tp30606801p32479857.html
Sent from the OmniGroup - MacOSX-Dev mailing list archive at Nabble.com.