2017-08-18 2 views
0

J'ai un morceau de code qui génère Excel avec des fonctions encastrables Exécuter un fichier cmd de IIS8

string xmlfilePath = "C:\\Test\\standard_xml.xml"; 
string script = "C:\\Test\\script.vbs"; 
string template = "Template"; 
string cmdfilePath = @"C:\\Test\\executable.cmd"; 
if (File.Exists(cmdfilePath)) 
    { 
    File.Delete(cmdfilePath); 
    } 

using (FileStream fs = File.Create(cmdfilePath)) 
    { 
    Byte[] info = new UTF8Encoding(true).GetBytes("\"" + script + "\"" + " " + 
     "\"" + template + "\"" + " \"" + xmlfilePath + "\""); 
    fs.Write(info, 0, info.Length); 
    } 
    var process = Process.Start(cmdfilePath); 
    process.WaitForExit(); 

Ce codes génère un excel et fait quelques opérations nécessaires.

Cela fonctionne très bien lors des tests en studio visuel, mais quand je l'exécute sur iis8 ça ne marche jamais. J'ai essayé toutes les différentes solutions qui sont mentionnées sur le web rien n'a fonctionné.

Toute aide est appréciée.

+0

Quelle (s) exception (s) obtenez-vous? mettre un peu de connexion pour voir quelles lignes sont exécutées. Normalement, ceci est basé sur l'autorisation, vous pourriez essayer d'ajouter le DefaultAppPool aux permissions du répertoire ou vérifier que votre fichier est x64 sur un serveur x86? – user685590

+0

Salut ... c'est un serveur x64 .. malheureusement, le journal ne m'aide pas beaucoup –

+0

Seriez-vous autorisé à poster le script pour le fichier 'executable.cmd'? – ryancdotnet

Répondre

0

Sans en être certain (à travers des journaux d'erreurs, des captures d'écran d'eventvwr), je suppose que vous êtes confronté à un problème d'autorisations. Lorsque vous exécutez des opérations sur fichiers à partir d'IIS, vous devez garder à l'esprit l'identité AppPool utilisée pour le site Web. L'identité AppPool doit avoir des autorisations d'écriture sur ce dossier spécifique.

Je suggère de laisser l'identité de l'utilisateur AppPool au "ApplicationPoolIdentity" intégré, car c'est l'option la plus sécurisée.

Il y a beaucoup de bonnes informations à ce sujet sur MSDN: https://docs.microsoft.com/en-us/iis/manage/configuring-security/application-pool-identities

examiner spécifiquement la partie des ressources pour réaliser comment ajouter des autorisations de fichier: https://docs.microsoft.com/en-us/iis/manage/configuring-security/application-pool-identities#securing-resources

Il y a d'autres scénarios où vous pouvez remplacer l'utilisateur compte pour un AppPool donné, et même sur le site Web (pour des choses comme l'usurpation d'identité, etc), mais si vous ne faites pas ceux-ci, alors ce qui précède devrait fonctionner.

+0

Salut ryan .. Merci pour la réponse .. J'ai essayé tout ça .. mais ça ne marche pas .. La chose drôle que je vois un processus pour mon cmd dans les détails du gestionnaire de tâches. Donc, il est en train de créer le processus, mais ne l'exécute pas –