2013-05-08 4 views
-1

EDIT: вот файл, если кто-то хочет, чтобы тест: CleanerC# Сделать приложение совместимым на других компьютерах?

Я делаю программу, которая чистит некоторые файлы автоматически при запуске по причинам производительности.

Как создать приложение на другом компьютере, на котором есть только файлы релизов?

Я создал приложение с использованием Framework 2.0 и корректно работает без ошибок на своем компьютере, но если я скопирую файлы релиза на другой компьютер, «приложение перестает отвечать» произойдет, когда оно запустится.

Нет файлов ресурсов, кроме значка и встроенного ресурса. У меня нет идеи, что делать.

private void Cleansystem() 
    { 
     timer1.Enabled = true; 
     timer1.Start(); 
     progressBar1.Maximum = 10; 
     String Offline = Environment.ExpandEnvironmentVariables("%SYSTEMROOT%") + "\\Offline Web Pages"; 
     String download = Environment.ExpandEnvironmentVariables("%SYSTEMROOT%") + "\\Downloaded Program Files"; 
     String software = Environment.ExpandEnvironmentVariables("%SYSTEMROOT%") + "\\SoftwareDistribution\\Download"; 
     String wintemp = Environment.ExpandEnvironmentVariables("%SYSTEMROOT%") + "\\Temp"; 
     String recent = Environment.ExpandEnvironmentVariables("%appdata%") + "\\Microsoft\\Windows\\Recent"; 
     String cookies = Environment.ExpandEnvironmentVariables("%appdata%") + "\\Microsoft\\Windows\\cookies"; 
     String TempInternet = Environment.ExpandEnvironmentVariables("%userprofile%") + "\\Local Settings\\Temporary Internet Files"; 
     String apptemp = Environment.ExpandEnvironmentVariables("%userprofile%") + "\\appdata\\Local\\Temp"; 
     String settingtemp = Environment.ExpandEnvironmentVariables("%userprofile%") + "\\Local Settings\\Temp"; 
     EmptyFolderContents(Offline); 
     EmptyFolderContents(download); 
     EmptyFolderContents(software); 
     EmptyFolderContents(wintemp); 
     EmptyFolderContents(recent); 
     EmptyFolderContents(cookies); 
     EmptyFolderContents(TempInternet); 
     EmptyFolderContents(apptemp); 
     EmptyFolderContents(settingtemp); 
     timer1.Interval = 1000; 
     timer1.Tick += new EventHandler(timer1_Tick); 
    } 

    private void EmptyFolderContents(string folderName) 
    { 
     foreach (var folder in Directory.GetDirectories(folderName)) 
     { 
      try 
      { 
       Directory.Delete(folder, true); 
      } 
      catch (Exception excep) 
      { 
       logger.Fatal(excep); 
      } 
     } 
     foreach (var file in Directory.GetFiles(folderName)) 
     { 
      try 
      { 
       File.Delete(file); 
      } 
    catch (Exception excep) 
    { 
     logger.Fatal(excep); 
    } 
     } 
    } 
    void timer1_Tick(object sender, EventArgs e) 
    { 
     if (progressBar1.Value != 10) 
     { 
      progressBar1.Value++; 
     } 
     else 
     { 
      Environment.Exit(0); 
     } 
    } 
} 

}

2013-05-08 18: 02: 58,7013 FATAL System.IO.IOException: Процесс не может получить доступ к файлу «C: \ Windows \ Temp \ Cleaner.vsho_130508_173905_05efe1ff -6b41-4cb6-bb00-7acad6960c36.iTrace ' , потому что он используется другим процессом. на System.IO .__ Error.WinIOError (Int32 ERRORCODE, String maybeFullPath)
на System.IO.File.InternalDelete (String, Boolean пути checkHost) при System.IO.File.Delete (String путь) на GifImagee. MainWindow.EmptyFolderContents (String folderName) в c: \ Users \ Administrator \ Documents \ Visual Studio 2012 \ Projects \ tet \ Cleaner \ Cleaner \ MainWindow.xaml.cs: строка 923 2013-05-08 18: 02: 58.7349 FATAL System.IO.IOException: процесс не может получить доступ к файлу 'C: \ Windows \ Temp \ OSO.vshost.exe_130508_174608_0d66d9df-040c-457b-84b5-7c3576196718.iTrace' , потому что он используется другим процессом. на System.IO .__ Error.WinIOError (Int32 ERRORCODE, String maybeFullPath)
на System.IO.File.InternalDelete (String, Boolean пути checkHost) при System.IO.File.Delete (String путь) на GifImagee. MainWindow.EmptyFolderContents (String folderName) в c: \ Users \ Administrator \ Documents \ Visual Studio 2012 \ Projects \ tet \ Cleaner \ Cleaner \ MainWindow.xaml.cs: строка 923 2013-05-08 18: 02: 58.8630 FATAL System.UnauthorizedAccessException: Отказ от доступа к пути 'Aug2005_d3dx9_27_x64.cab'. на System.IO.Directory.DeleteHelper (String FULLPATH, Строка UserPath, Логическое рекурсивной, булева throwOnTopLevelDirectoryNotFound) при System.IO.Directory.Delete (String FULLPATH, String UserPath, Boolean рекурсивной, булева checkHost) при System.IO .Directory.Delete (String путь, Boolean рекурсивный) в GifImagee.MainWindow.EmptyFolderContents (String FOLDERNAME) в C: \ Users \ Administrator \ Documents \ Visual Studio 2012 \ Projects \ Tet \ уборщик \ уборщик \ MainWindow.xaml .cs: ​​строка 912 2013-05-08 18: 02: 58.8743 FATAL System.IO.IOException: процесс не может получить доступ к файлу 'C: \ Users \ Administrator \ appdata \ Local \ Temp \ etilqs_2Isw34P5eLyyP6D' , потому что он используется другим процессом. at System.IO .__ Error.WinIOError (Int32 errorCode, String maybeFullPath)
at System.IO.File.InternalDelete (String path, Boolean checkHost) в System.IO.File.Удалить (String путь) на GifImagee.MainWindow.EmptyFolderContents (String FOLDERNAME) в C: \ Users \ Administrator \ Documents \ Visual Studio 2012 \ Projects \ \ Очистители тет \ уборщик \ MainWindow.xaml.cs: линия 923 2013 -05-08 18: 02: 58.9074 FATAL System.IO.IOException: процесс не может получить доступ к файлу 'C: \ Users \ Administrator \ appdata \ Local \ Temp \ etilqs_7CSWlOdfR5GbUuD' , потому что он используется другим процессом. на System.IO .__ Error.WinIOError (Int32 ERRORCODE, String maybeFullPath)
на System.IO.File.InternalDelete (String, Boolean пути checkHost) при System.IO.File.Delete (String путь) на GifImagee. MainWindow.EmptyFolderContents (String folderName) в c: \ Users \ Administrator \ Documents \ Visual Studio 2012 \ Projects \ tet \ Cleaner \ Cleaner \ MainWindow.xaml.cs: строка 923 2013-05-08 18: 02: 58.9279 FATAL System.IO.IOException: процесс не может получить доступ к файлу 'C: \ Users \ Administrator \ appdata \ Local \ Temp \ etilqs_9htGcbvUEEpPsK3' , потому что он используется другим процессом. на System.IO .__ Error.WinIOError (Int32 ERRORCODE, String maybeFullPath)
на System.IO.File.InternalDelete (String, Boolean пути checkHost) при System.IO.File.Delete (String путь) на GifImagee. MainWindow.EmptyFolderContents (String folderName) в c: \ Users \ Administrator \ Documents \ Visual Studio 2012 \ Projects \ tet \ Cleaner \ Cleaner \ MainWindow.xaml.cs: строка 923 2013-05-08 18: 02: 58.9389 FATAL System.IO.IOException: процесс не может получить доступ к файлу 'C: \ Users \ Administrator \ appdata \ Local \ Temp \ etilqs_fPoiWPUjDlCkgey' , потому что он используется другим процессом. на System.IO .__ Error.WinIOError (Int32 ERRORCODE, String maybeFullPath)
на System.IO.File.InternalDelete (String, Boolean пути checkHost) при System.IO.File.Delete (String путь) на GifImagee. MainWindow.EmptyFolderContents (String folderName) в c: \ Users \ Administrator \ Documents \ Visual Studio 2012 \ Projects \ tet \ Cleaner \ Cleaner \ MainWindow.xaml.cs: строка 923 2013-05-08 18: 02: 58.9703 FATAL System.IO.IOException: процесс не может получить доступ к файлу 'C: \ Users \ Administrator \ appdata \ Local \ Temp \ etilqs_JtJ95QHTNu6Vj7D' , потому что он используется другим процессом. на System.IO .__ Error.WinIOError (Int32 ERRORCODE, String maybeFullPath)
на System.IO.File.InternalDelete (String, Boolean пути checkHost) при System.IO.File.Delete (String путь) на GifImagee. MainWindow.EmptyFolderContents (String folderName) в c: \ Users \ Administrator \ Documents \ Visual Studio 2012 \ Projects \ tet \ Cleaner \ Cleaner \ MainWindow.xaml.cs: строка 923 2013-05-08 18: 02: 59.0947 FATAL System.UnauthorizedAccessException: Отказ от доступа к пути 'Aug2005_d3dx9_27_x64.cab'. на System.IO.Directory.DeleteHelper (String FULLPATH, Строка UserPath, Логическое рекурсивной, булева throwOnTopLevelDirectoryNotFound) при System.IO.Directory.Delete (String FULLPATH, String UserPath, Boolean рекурсивной, булева checkHost) при System.IO .Directory.Delete (String путь, Boolean рекурсивный) в GifImagee.MainWindow.EmptyFolderContents (String FOLDERNAME) в C: \ Users \ Administrator \ Documents \ Visual Studio 2012 \ Projects \ Tet \ уборщик \ уборщик \ MainWindow.xaml .cs: ​​строка 912 2013-05-08 18: 02: 59.1152 FATAL System.IO.IOException: процесс не может получить доступ к файлу 'C: \ Users \ Administrator \ Local Настройки \ Temp \ etilqs_2Isw34P5eLyyP6D', потому что он используется другим процессом. в System.IO .__ Error.WinIOError (Int32 errorCode, String maybeFullPath) в System.IO.File.InternalDelete (String path, Boolean checkHost) в System.IO.File.Delete (String path) в GifImagee.MainWindow. EmptyFolderContents (String folderName) в c: \ Users \ Administrator \ Documents \ Visual Studio 2012 \ Projects \ tet \ Cleaner \ Cleaner \ MainWindow.xaml.cs: строка 923 2013-05-08 18: 02: 59.1263 FATAL System .IO.IOException: процесс не может получить доступ к файлу 'C: \ Users \ Administrator \ Local Настройки \ Temp \ etilqs_7CSWlOdfR5GbUuD', потому что он используется другим процессом. в System.IO .__ Error.WinIOError (Int32 errorCode, String maybeFullPath) в System.IO.File.InternalDelete (String path, Boolean checkHost) в System.IO.File.Delete (String path) в GifImagee.MainWindow. EmptyFolderContents (String folderName) в c: \ Users \ Administrator \ Documents \ Visual Studio 2012 \ Projects \ tet \ Cleaner \ Cleaner \ MainWindow.xaml.cs: строка 923 2013-05-08 18: 02: 59.1563 Система FATAL .IO.IOException: процесс не может получить доступ к файлу 'C: \ Users \ Administrator \ Local Настройки \ Temp \ etilqs_9htGcbvUEEpPsK3', потому что он используется другим процессом. в System.IO .__ Error.WinIOError (Int32 errorCode, String maybeFullPath) в System.IO.File.InternalDelete (String path, Boolean checkHost) в System.IO.File.Delete (String path) в GifImagee.MainWindow. EmptyFolderContents (String folderName) в c: \ Users \ Administrator \ Documents \ Visual Studio 2012 \ Projects \ tet \ Cleaner \ Cleaner \ MainWindow.xaml.cs: строка 923 2013-05-08 18: 02: 59.1774 Система FATAL .IO.IOException: процесс не может получить доступ к файлу 'C: \ Users \ Administrator \ Local Settings \ Temp \ etilqs_fPoiWPUjDlCkgey', потому что он используется другим процессом. в System.IO .__ Error.WinIOError (Int32 errorCode, String maybeFullPath) в System.IO.File.InternalDelete (String path, Boolean checkHost) в System.IO.File.Delete (String path) в GifImagee.MainWindow. EmptyFolderContents (String folderName) в c: \ Users \ Administrator \ Documents \ Visual Studio 2012 \ Projects \ tet \ Cleaner \ Cleaner \ MainWindow.xaml.cs: строка 923 2013-05-08 18: 02: 59.1886 Система FATAL .IO.IOException: процесс не может получить доступ к файлу 'C: \ Users \ Administrator \ Local Settings \ Temp \ etilqs_JtJ95QHTNu6Vj7D', потому что он используется другим процессом. в System.IO .__ Error.WinIOError (Int32 errorCode, String maybeFullPath) в System.IO.File.InternalDelete (String path, Boolean checkHost) в System.IO.File.Delete (String path) в GifImagee.MainWindow. EmptyFolderContents (String FOLDERNAME) в C: \ Users \ Administrator \ Documents \ Visual Studio 2012 \ Projects \ Tet \ \ Очистители Очиститель \ MainWindow.xaml.cs: линия 923

+3

«Приложение перестало отвечать» могло быть любым. Это вызовет бесконечный цикл. Совместимость, вероятно, не проблема. –

+0

Не совсем уверен, что происходит с вашим приложением. У вас есть код? Компьютер с установленным .NET 2.0 должен просто запускать ваше приложение, если оно не зависит от других библиотек. –

+0

@RobertHarvey Может ли это быть, если некоторые файлы не могут быть удалены сбой программы на других компьютерах? – Sneakybastardd

ответ

1

Постараюсь изменить свой код таким образом

private void EmptyFolderContents(string folderName) 
{ 
    if(Directory.Exists(folderName) 
    { 
     foreach (var folder in Directory.GetDirectories(folderName)) 
     { 
      try 
      { 
       Directory.Delete(folder, true); 
      } 
      catch(Exception ex)     
      { 
       MessageBox.Show("Error deleting folder: " + folder+ Environment.NewLine + ex.Message); 
      } 
     } 
     foreach (var file in Directory.GetFiles(folderName)) 
     { 
      try 
      { 
       File.Delete(file); 
      } 
      catch(Exception ex) 
      { 
       MessageBox.Show("Error deleting file: " + file + Environment.NewLine + ex.Message); 
      } 
     } 

    } 

}

я добавил минимальную проверку, чтобы увидеть, если каталог существует, но имейте в виду, что этот код может не для очень много причин. Look at the exceptions list в документации MSDN

+0

Похоже, мне нужно использовать встроенный CMD-решение? Спасибо за помощь ... :) – Sneakybastardd

0

вы смотрели в «Event Viewer ", чтобы узнать, есть ли там больше деталей. Возможно, отсутствует файл конфигурации или проблема с правами доступа.

0

Хорошо, один из файлов заблокирован - что обычно для файлов temp, которые, как мне кажется, вы пытаетесь удалить.

Это не должно вызывать проблемы, поскольку удаление является попыткой поймать, если честно - в вашем случае может быть лучше иметь пустую попытку поймать.

См. Здесь.

Detecting whether a file is locked by another process (or indeed the same process)

Существует исключение безопасности при попытке получить доступ к следующей папке «Aug2005_d3dx9_27_x64.cab» вы получаете «НЕУСТРАНИМЫЙ System.UnauthorizedAccessException: Доступ к траектории х» ошибке.

Попробуйте обернуть свою папку foreach (папка var в каталоге Directory.GetDirectories (folderName)) в попытке поймать, обновить разрешения папки, исключить проблемные папки из вашего удаления или проверить права доступа к папкам, прежде чем пытаться получить доступ их.

Смежные вопросы