[NSWorkSpace sharedWorkSpace]

mars 2005 modifié dans API AppKit #1
Bonjour,

Je n'ai pas trouvé de forums très adapté pour mon problème, alors je pose la question ici. Est ce que quelqu'un a réussi à  utiliser [[NSWorkSpace sharedWorkSpace] unmountAndEjectDeviceAtPath:@/Volumes/NO_NAME];

Chez moi, ca renvoie toujours NO (0), et ça ne fait rien. Rien n'est envoyé dans la console. J'ai essayé avec un partage SMB, un partage AFP, et un disque externe FireWire.

Si cela ne fonctionne pas, y a-t il une solution complémentaire ? Apple Script permet de le faire, mais avec le nom du volume (et non le chemin).

Réponses

  • amnesicamnesic Membre
    23:41 modifié #2
    étrange car je viens de tester avec mon iPod :
    BOOL result = [[NSWorkspace sharedWorkspace] unmountAndEjectDeviceAtPath:@"/Volumes/iPod"];
    


    fonctionne bien pourtant :-\\ ...tu n'aurais pas des fichiers restés ouvert ?
  • 23:41 modifié #3
    A priori non, puisque j'arrive bien à  éjecter le disque via le Finder...

    Je poursuis donc mes investigations...
  • 23:41 modifié #4
    Voici un projet simple qui ne fonctionne pas. Je l'ai testé sur deux machines différentes (10.3.x).

    Mon disque externe s'appelle Test. Il faut changer le nom du disque dans Controller.m.

    Je fais sûrement une boulette quelquepart...

    [Fichier joint supprimé par l'administrateur]
  • ClicCoolClicCool Membre
    mars 2005 modifié #5
    Salut killerdemouches :)

    Tron projet ne semble pas comporter d'erreur.
    En tous cas chez moi il éjecte sans problème et me renvoie 1 comme réponse.

    Par contre n'est tu pas en train d'essayer d'ejecter un disque dur externe ?
    Car je crois qu'il y a une subtilité entre un volume ejectable (iPod, un CD, ou dmg monté) et un volume démontable mais non éjectable comme un dd externe....  ;)

    La méthode: mountedRemovableMedia te listera tous les volumes qui obéiront à  ton projet (et tu devrais pas y voir le DD Externe :( )
  • amnesicamnesic Membre
    23:41 modifié #6
    Effectivement, ce n'est pas possible non plus de démonter un volume réseau (SMB ou afp ) via unmountAndEjectDeviceAtPath :-\\

    Mais tu peux t'en sortir via l'API de Carbon : FSUnmountVolumeSync.

    Je glisse le projet "Cocoa&Carbon" en attachement .. (on a souvent tendance à  les opposer, mais finalement elles sont complémentaires)

    [Fichier joint supprimé par l'administrateur]
  • 23:41 modifié #7
    dans 1111434864:

    Effectivement, ce n'est pas possible non plus de démonter un volume réseau (SMB ou afp ) via unmountAndEjectDeviceAtPath :-\\

    Mais tu peux t'en sortir via l'API de Carbon : FSUnmountVolumeSync.

    Je glisse le projet "Cocoa&Carbon" en attachement .. (on a souvent tendance à  les opposer, mais finalement elles sont complémentaires)


    Merci beaucoup à  tous pour votre dévouement!
  • 23:41 modifié #8
    dans 1111434864:

    Effectivement, ce n'est pas possible non plus de démonter un volume réseau (SMB ou afp ) via unmountAndEjectDeviceAtPath :-\\

    Mais tu peux t'en sortir via l'API de Carbon : FSUnmountVolumeSync.

    Je glisse le projet "Cocoa&Carbon" en attachement .. (on a souvent tendance à  les opposer, mais finalement elles sont complémentaires)

    Apparemment l'API carbon ne fonctionne que pour les volumes physiques. En tout cas ça échoue avec mon partage SMB :-(

    Il doit bien exister un autre moyen qu'AppleScript pour ejecter ces volumes réseau, non?
  • ClicCoolClicCool Membre
    23:41 modifié #9
    Si tu sais le faire en A.S. c'est déjà  ça.

    Utilise NSAppleScript avec le bout de code AS voulu et executes le.

    C'est surement moins satisfaisant que de rester purement Cocoa mais ça devrait pas vraiement ralentir ton appli non ?

    Sinon t'as unmount sous BSD peut-être ?
    MOUNT(2)                    BSD System Calls Manual                  MOUNT(2)
    NAME
        mount, unmount - mount or dismount a filesystem

    SYNOPSIS
        #include <sys/param.h>
        #include <sys/mount.h>

        int
        mount(const char *type, const char *dir, int flags, void *data);

        int
        unmount(const char *dir, int flags);

    .../...
  • 23:41 modifié #10
    dans 1111578862:

    Si tu sais le faire en A.S. c'est déjà  ça.

    Utilise NSAppleScript avec le bout de code AS voulu et executes le.

    C'est surement moins satisfaisant que de rester purement Cocoa mais ça devrait pas vraiement ralentir ton appli non ?

    En fait je travaille sur une amélioration de SMB Manager qui utilisait de l'Apple Script. Le problème c'est qu'Apple Script permet de démonter un volume en fonction de son nom, et non en fonction de son point de montage ce qui pose problème lorsque l'on monte plusieurs volumes qui ont le même nom.

    Je vais essayer avec les appels BSD... J'espère juste des les notifications seront générées
  • amnesicamnesic Membre
    23:41 modifié #11
    dans 1111576201:

    Apparemment l'API carbon ne fonctionne que pour les volumes physiques. En tout cas ça échoue avec mon partage SMB :-(


    Ici j'arrive à  démonter un volume distant qu'il soit SMB ou AFP via Carbon ... Pour essayer d'identifier ton souci, peux-tu monter le volume et faire les essais : 
    1. que donne un :
    ls -al /Volumes/

    2. la commande umount fonctionne sur le volume SMB ?

    3 . Quelle valeur de renvoie la fonction FSUnmountVolumeSync ? 0 ? -47 ?
  • 23:41 modifié #12
    dans 1111591145:

    dans 1111576201:

    Apparemment l'API carbon ne fonctionne que pour les volumes physiques. En tout cas ça échoue avec mon partage SMB :-(


    Effectivement, cela fonctionne... Le problème était que le chemin pour démonter le chemin est case sensitive. Merci à  tous!
Connectez-vous ou Inscrivez-vous pour répondre.