2017-02-03 26 views
0

У меня есть папка на сервере, содержащая файлы в формате pdf (Windows Server 2008 R2 Enterprise). Мне нужно открыть папку с авторизованной учетной записью пользователя и отобразить pdf-файл в браузере. Пользователь имеет полные права доступа к папке и является членом группы «Администратор».Открыть файл PDF с C# .NET с использованием Impersonate

Код Bellow работает из моего локального файла, так как он открывает файл pdf из папки, расположенной на сервере в Adobe Reader. Но на сервере процесс не запускается (Adobe Reader не открывается), и никаких исключений не возникает. Большинство форумов говорят, что отключение UAC поможет, но я не хочу этого делать из соображений безопасности.

Как я могу решить эту проблему? Пожалуйста помоги.

try 
{ 
    WindowsIdentity wi = new WindowsIdentity(@"[email protected]");     
    WindowsImpersonationContext ctx = null; 

    try 
    { 
     ctx = wi.Impersonate(); 

     // Thread is now impersonating you can call the backend operations here... 
     Process p = new Process(); 

     p.StartInfo = new ProcessStartInfo() 
     { 
      CreateNoWindow = true, 
      Verb = "open",       
      FileName = ConfigurationManager.AppSettings["mobil"] + "\\" + prmSicilNo + "_" + prmPeriod.ToString("yyyyMM") + ".pdf",            
     }; 

     p.Start();    
    } 
    catch (Exception ex) 
    { 
     msj = ex.Message; 
    } 
    finally 
    { 
     ctx.Undo(); 
    }        

    return msj; 
} 
catch (Exception ex) 
{   
    return msj + "Error: " + ex.Message; 
} 

ответ

0

Попробуйте выполнить свой EXE-файл с Ран, как Adminstrator на server.If он работает должным образом, то добавьте следующий код:

p.StartInfo.Verb = "runas"; 
0

@Chintan Udeshi Спасибо за быстрый ответ. Я могу запустить AcroRd32.exe по Run as Administrator, но когда я попытался с runas, я получил ошибку, которая говорит; «Приложение не связано с указанным файлом для этой операции».

Я также попытался установить абсолютный путь чтения Acrobat, но он все еще не работает. Есть идеи?

p.StartInfo = new ProcessStartInfo(@"C:\Program Files (x86)\Adobe\Reader 10.0\Reader\AcroRd32.exe") 
{ 
    CreateNoWindow = true, 
    Verb = "runas",       
    FileName = ConfigurationManager.AppSettings["mobil"] + "\\" + prmSicilNo + "_" + prmPeriod.ToString("yyyyMM") + ".pdf", // "c:\\pdf\\",            
};