2009-10-19 5 views
0

J'ai écrit une page Web ASP.NET avec C# derrière qui exécute un script vb existant. L'idée est que l'utilisateur télécharge une feuille de calcul Excel (.xls) en utilisant la page Web, le C# effectue quelques vérifications de base sur le fichier (type de fichier, nom de fichier, etc.) puis enregistre les fichiers .xls dans un emplacement réseau . Le C# transmet ensuite le chemin réseau du .xls au script vb, qui obtient les informations requises à partir du .xls pour créer un fichier .csv.Appel d'un script vb à partir d'une page Web asp.net/C#

Enfin, le fichier .csv est passé dans une procédure stockée et téléchargé dans une table de base de données.

Le problème est que tout cela fonctionne parfaitement lorsque j'exécute la page Web localement sur ma machine. Cependant lorsque je télécharge la page sur le serveur web, il ne semble pas exécuter le script vb; Au lieu de cela, il attend juste que le script sorte.

Quelques infos rapides:

  • Excel est installé sur le serveur Web
  • Le site est mis à exécuter des scripts et des exécutables
  • Le script est actuellement fixé à «courir comme mon login domaine personnel (cela doit changer) qui a admin sur le serveur web
  • Si je lance le script sur le serveur Web en utilisant le cela fonctionne rapidement cmd

J'apprécierais vraiment toutes les idées sur ce qui pourrait mal se passer ... sérieusement, je m'arrache les cheveux et je vais considérer n'importe quelle idée, peu importe comment c'est fou ... mais, et c'est une grosse idée , en dépit du fait que qu'il ya beaucoup d'autres façons d'atteindre le même résultat, je crains que pour un certain nombre de raisons, cela est ce que je dois travailler avec :)

Modifier

Voici comment j'appelle le script

   try 
       { 
        System.Security.SecureString password = new System.Security.SecureString(); 

        string uspw = "mypassword"; 
        foreach (char c in uspw) 
        { 
         password.AppendChar(c); 
        } 

        Process scriptProc = new Process(); 
        scriptProc.StartInfo.FileName = @"cscript"; 
        scriptProc.StartInfo.Arguments = scriptPath + " //Nologo " + uploadPath + xlsFileName; 
        scriptProc.StartInfo.WindowStyle = ProcessWindowStyle.Minimized; 
        scriptProc.StartInfo.UserName = "myusername"; 
        scriptProc.StartInfo.Password = password; 
        scriptProc.StartInfo.UseShellExecute = false; 
        scriptProc.Start(); 
        scriptProc.WaitForExit(); 
        scriptProc.Close(); 

       } 
       catch... 

Tous les chemins de fichiers sont relatifs.

Le code semble échouer lorsque le script est appelé. Vous pouvez voir clairement la page en attente de la fin du script. Toutefois, si vous regardez le gestionnaire de tâches sur le serveur Web, ni cscript ni Excel ne commencent à s'exécuter.

J'ai aussi bloqué une boîte de message dès le début du script qui ne s'affiche

pas Edit 2 Il se avère que cscript est en cours d'exécution, je avais juste besoin de cocher les « Tous les utilisateurs 'case à cocher dans le gestionnaire de tâches ... Je ne suis toujours pas le plus sage si!

Merci beaucoup à l'avance

+1

où exactement cela semble-t-il se casser ... comment l'application invoque-t-elle le vbscript, pourriez-vous poster du code à des points clés dans votre fichier? processus. –

+0

Merci pour votre réponse, s'il vous plaît voir mon edit – Kurut

Répondre

1

On dirait que vous utilisez l'automatisation pour contrôler l'application Excel elle-même?

Quelques infos rapides:

  • Excel est installé sur le serveur Web

qui est généralement une mauvaise idée, car l'application Excel n'est pas une application qui est destinée à être automatisé par un serveur. La chose pourrait se bloquer parce que l'application attend l'entrée de l'utilisateur dans une boîte de dialogue quelque part. Et ce n'est pas évolutif pour gérer les opérations de plusieurs utilisateurs simultanément. Si le but final est d'extraire les données du fichier Excel et de les placer dans un serveur sql, je vous suggère plutôt d'utiliser le fournisseur Jet OLEDB pour récupérer les données du fichier Excel, soit depuis votre application web et en laissant cela alimenter les données dans le serveur sql, ou laisser le serveur sql le faire directement. S'il y a beaucoup de données dans le fichier Excel, ce dernier pourrait être le meilleur choix

1

Sans voir le code ceci est une supposition aveugle - je vous suggère de vérifier la façon dont vous spécifiez le chemin du script vb - assurez-vous que vous n'utilisez pas un chemin absolu, et que le fichier se trouve au même endroit que la page C# sur le serveur, comme sur votre machine.

+0

Merci pour votre réponse, s'il vous plaît voir mon edit – Kurut

Questions connexes