• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag
 

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: Sending launch and quit Apple Events: Crazy Connection Errors
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Sending launch and quit Apple Events: Crazy Connection Errors


  • Subject: Re: Sending launch and quit Apple Events: Crazy Connection Errors
  • From: Michael Nickerson <email@hidden>
  • Date: Tue, 07 Jul 2009 11:30:03 -0400


On Jul 7, 2009, at 8:21 AM, Jerry Krinock wrote:

I need to be able to quit and re-launch other applications, and have been getting all kinds of weird behavior. Maybe if someone could explain this one little test case I've isolated, it would be a big help.

The code below attempts to launch TextEdit, wait 5 seconds, quit TextEdit, wait 5 seconds, repeat forever. I get a launch, a quit, and a launch. But when it tries to quit for the second time, AESendMessage returns a -609 "Connection Invalid" error. I imagine this is because it is trying to connect to the application instance that it had quit the first time.

Documention of AESendMessage implies that recent versions of AppleScript will automatically try and reconnect, and that there is no more option to set.

How can I get it to forget the old connection and make a new one?

Thanks,

Jerry



I added similar functionality to one of my apps, and had problems using the bundle id as well. I switched to using the PSN (typeProcessSerialNumber) and that seems to work. You can use this to get the PSN:


void PSNForBundleIdentifier( NSString *bundleIdentifier, ProcessSerialNumber *psn )
{
OSStatus anErr = noErr;
ProcessSerialNumber aNum = { kNoProcess, kNoProcess };


    if ( psn == NULL ) return;

while ( (anErr == noErr) ) {
anErr = GetNextProcess( &aNum );
if ( anErr == noErr ) {
CFDictionaryRef procInfo = ProcessInformationCopyDictionary( &aNum, kProcessDictionaryIncludeAllInformationMask );
if ( [[(NSDictionary *)procInfo objectForKey:(NSString *)kCFBundleIdentifierKey] isEqualToString:bundleIdentifier] ) {
*psn = aNum;
CFRelease( procInfo );
break;
}
CFRelease( procInfo );
}
}
}



And then change your QuitAndSleep function to:

void QuitAndSleep(NSString* bundleIdentifier, float seconds) {
   NSLog(@"Quitting") ;
   NSAppleEventDescriptor *as ;
   ProcessSerialNumber aNum = { kNoProcess, kNoProcess } ;

   PSNForBundleIdentifier( bundleIdentifier, &aNum );

as = [NSAppleEventDescriptor descriptorWithDescriptorType:typeProcessSerialNumber
bytes:&aNum
length:sizeof(aNum)];
NSAppleEventDescriptor *ae ;
ae = [NSAppleEventDescriptor appleEventWithEventClass:kCoreEventClass
eventID:kAEQuitApplication
targetDescriptor:as
returnID:kAutoGenerateReturnID
transactionID:kAnyTransactionID];
AppleEvent *quitApplicationAppleEventPtr = (AEDesc*)[ae aeDesc];
if (quitApplicationAppleEventPtr) {
OSStatus err = AESendMessage(quitApplicationAppleEventPtr,
NULL,
kAENoReply,
kAEDefaultTimeout) ;
NSLog(@"Quit err = %d", err) ;
}
NSLog(@"Sleep after quit") ;
usleep(seconds * 1e6) ;


}


-------------------------------------- Darkshadow (aka Michael Nickerson) http://www.nightproductions.net


_______________________________________________

Cocoa-dev mailing list (email@hidden)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden


  • Follow-Ups:
    • Re: Sending launch and quit Apple Events: Crazy Connection Errors
      • From: Jerry Krinock <email@hidden>
References: 
 >Sending launch and quit Apple Events: Crazy Connection Errors (From: Jerry Krinock <email@hidden>)

  • Prev by Date: Re: AsyncSocket. Troubles with MTMessageBroker didReceiveData
  • Next by Date: Re: CoreData deleteAll of kind
  • Previous by thread: Sending launch and quit Apple Events: Crazy Connection Errors
  • Next by thread: Re: Sending launch and quit Apple Events: Crazy Connection Errors
  • Index(es):
    • Date
    • Thread