Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Ветеран


Сообщения: 2205
Благодарности: 730

Профиль | Отправить PM | Цитировать


greg zakharov, видимо не за тот хвост дёрнул, "му" не получилось...
Убрал проверки, напрямую прописал путь к обновлениям и файлу лога, батник в 866 кодировке (в пути есть кириллица и избавляться от неё не хотелось-бы).
Где взять файлы app.exe, app.pdb?
os - Win7x32
код
Код: Выделить весь код
/* 2>nul
@echo off
  setlocal enabledelayedexpansion
    set "key=HKLM\SOFTWARE\Microsoft\.NETFramework"
    for /f "tokens=3" %%i in (
      '2^>nul reg query %key% /v InstallRoot'
    ) do set "root=%%i"
    for /f %%i in ('dir /ad /b "%root%v*"') do (
      set "path=%root%%%i;!path!"
    )
    for %%i in (csc.exe) do (
      if exist "%%~$PATH:i" set "csc=%%~$PATH:i"
    )
    set out="%tmp%\app.exe"
    set pbd="%tmp%\app.pdb"
    set "arg=/nologo /t:exe /out:%out% /optimize+"
    set "arg=%arg% /debug:pdbonly /define:CODE_ANALYSIS"
    %csc% %arg% "%~f0"
    %out% "d:\Декомпрессор\Updates" "d:\Декомпрессор\log.txt"
    del /f /q %out% %pdb%
  endlocal
pause
exit /b
*/

using System;
using System.IO;
using System.Reflection;
using System.Diagnostics;
using System.Globalization;
using System.Text.RegularExpressions;

internal sealed class Program {
  static void Clear() {
    Console.CursorTop = Console.CursorTop - 1;
    Console.Write(new String(' ', Console.BufferWidth));
    Console.CursorTop = Console.CursorTop - 2;
  }

  static void PrintUsage() {
    Console.WriteLine("Usage: {0} <directory> <log>",
      typeof(Program).Assembly.GetName().Name
    );
  }

  static void Main(String[] args) {
    if (args.Length != 2) {
      PrintUsage();
      return;
    }

    Clear();
    String[] files;
    StringBuilder sb = new StringBuilder();

    try {
      files = Directory.GetFiles(args[0], "*.exe");
      foreach (String file in files) {
        Char c;
        FileVersionInfo fvi = FileVersionInfo.GetVersionInfo(file);
        switch (fvi.FileDescription.Split(new Char[] {' '})[0]) {
          case "Update": c = '1'; break;
          case "Definition": c = '2'; break;
          case "Security": c = '3'; break;
          default: c = 'x'; break;
        }
        sb.Append(
          String.Format(CultureInfo.InvariantCulture, "{0}-{1}\n",
            new Regex(@"(?i:kb\d+)").Match(file).Value, c
        ));
      }
      File.WriteAllText(args[1], sb.ToString());
    }
    catch (Exception e) {
      Console.WriteLine(e.Message);
    }
  }
}


ошибка
Код: Выделить весь код
d:\Декомпрессор>/*  2>nul
1.cmd(54,5): error CS0246: Не удалось найти имя типа или пространства имен "StringBuilder"
        (пропущена директива using или ссылка на сборку?)
1.cmd(54,28): error CS0246: Не удалось найти имя типа или пространства имен
        "StringBuilder" (пропущена директива using или ссылка на сборку?)
""c:\Windows\Temp\app.exe"" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.
Не удается найти c:\Windows\Temp\app.exe
Для продолжения нажмите любую клавишу . . .

Последний раз редактировалось sov44, 14-01-2017 в 22:25.


Отправлено: 22:00, 14-01-2017 | #8