ConfuserEx CLI 未指定输出目录
ConfuserEx CLI no output directory specified
我对 ConfuserEx CLI 工具有疑问。我想从这样的 C# 程序启动 CLI:
System.Diagnostics.Process p = new System.Diagnostics.Process();
//p.StartInfo.RedirectStandardOutput = true;
//p.StartInfo.UseShellExecute = false;
//p.StartInfo.CreateNoWindow = true;
p.StartInfo.FileName = strConfuserExFilePath;
p.StartInfo.Arguments = strConfuserExProjectFilePath;
p.Start();
strConfuserExFilePath = D:\Examples .Net\Diagramm\TEST\Haupt-Projekt\packages\ConfuserEx.Final.1.0.0\tools\Confuser.CLI.exe
strConfuserExProjectFilePath = D:\Examples .Net\Diagramm\TEST\Haupt-Projekt\TEST\bin\x86\Debug\ConfuserEx.crproj
我的 .crproj 文件如下所示:
<project outputDir="D:\Examples .Net\Diagramm\TEST\Haupt-Projekt\TEST\bin\x86\Debug\Confused" baseDir="D:\Examples .Net\Diagramm\TEST\Haupt-Projekt\TEST\bin\x86\Debug" debug="false" xmlns="http://confuser.codeplex.com">
<rule pattern="true" preset="normal" inherit="false">
<protection id="anti ildasm" action="add" />
<protection id="anti tamper" action="add" />
<protection id="constants" action="add" />
<protection id="ctrl flow" action="add" />
<protection id="anti dump" action="add" />
<protection id="anti debug" action="add" />
<protection id="invalid metadata" action="remove" />
<protection id="ref proxy" action="remove" />
<protection id="resources" action="remove" />
<protection id="rename" />
</rule>
<module path="h01_SonstVerwaltung.dll" />
</project>
当我 运行 命令框代码消失得如此之快以至于我无法读取错误。所以我想我会通过 CommandLine 启动 CLI 看看会发生什么。当我执行以下操作时:
D:\Examples .Net\Diagramm\TEST\Haupt.Projekt\packages\ConfuserEx.Final.1.0.0\tools>Confuser.CLI.exe D:\Examples .Net\Diagramm\TEST\Haupt-Projekt\TEST\bin\x86\Debug\ConfuserEx.crproj
我收到错误
Confuser.Ex.CLI: No output directory specified
st运行ge 的事情是如果我 运行 相同的代码但在 PowerShell 中它工作:
function ObfuscateProjectAssembly
{
[CmdletBinding()]
param()
Utility_AssertValid_FilePath $ConfuserExFilePath
Utility_AssertValid_FilePath $ConfuserExProjectFilePath
if( Test-Path -Path $ObfuscatedAssemblyFilePath ) {
Remove-Item -Path $ObfuscatedAssemblyFilePath
}
& $ConfuserExFilePath -nopause $ConfuserExProjectFilePath
Utility_AssertValid_FilePath $ObfuscatedAssemblyFilePath
}
为什么它适用于 PowerShell 而不适用于 C#。我已经尝试在我的 C# 代码中添加 -n|-noPause 参数。
编辑
我已尝试从我的 C# 代码执行 PowerShell,但仍然出现相同的错误消息。
using (PowerShell PowerShellInstance = PowerShell.Create())
{
PowerShellInstance.AddScript("& (\"" + strConfuserExFilePath + "\") -nopause " + strConfuserExFilePath);
Collection<PSObject> PSOutput = PowerShellInstance.Invoke();
if (PowerShellInstance.Streams.Error.Count > 0)
{
foreach(ErrorRecord er in PowerShellInstance.Streams.Error)
{
}
}
foreach (PSObject outputItem in PSOutput)
{
if (outputItem != null)
{
//System.Diagnostics.Debug.WriteLine(outputItem.BaseObject.GetType().FullName);
System.Diagnostics.Debug.Write(outputItem.BaseObject.ToString() + "\n");
}
}
}
所以我找到了我的问题,这很简单。我忘记了 .crproj 文件周围的 "。
这里是正确的方法:
通过流程排名第一:
p.StartInfo.Arguments = "-nopause \"" + strConfuserExProjectFilePath + "\"";
2 号通过 PowerShell:
PowerShellInstance.AddScript("& \"" + strConfuserExFilePath + "\" -nopause \"" + strConfuserExProjectFilePath + "\"");
我对 ConfuserEx CLI 工具有疑问。我想从这样的 C# 程序启动 CLI:
System.Diagnostics.Process p = new System.Diagnostics.Process();
//p.StartInfo.RedirectStandardOutput = true;
//p.StartInfo.UseShellExecute = false;
//p.StartInfo.CreateNoWindow = true;
p.StartInfo.FileName = strConfuserExFilePath;
p.StartInfo.Arguments = strConfuserExProjectFilePath;
p.Start();
strConfuserExFilePath = D:\Examples .Net\Diagramm\TEST\Haupt-Projekt\packages\ConfuserEx.Final.1.0.0\tools\Confuser.CLI.exe
strConfuserExProjectFilePath = D:\Examples .Net\Diagramm\TEST\Haupt-Projekt\TEST\bin\x86\Debug\ConfuserEx.crproj
我的 .crproj 文件如下所示:
<project outputDir="D:\Examples .Net\Diagramm\TEST\Haupt-Projekt\TEST\bin\x86\Debug\Confused" baseDir="D:\Examples .Net\Diagramm\TEST\Haupt-Projekt\TEST\bin\x86\Debug" debug="false" xmlns="http://confuser.codeplex.com">
<rule pattern="true" preset="normal" inherit="false">
<protection id="anti ildasm" action="add" />
<protection id="anti tamper" action="add" />
<protection id="constants" action="add" />
<protection id="ctrl flow" action="add" />
<protection id="anti dump" action="add" />
<protection id="anti debug" action="add" />
<protection id="invalid metadata" action="remove" />
<protection id="ref proxy" action="remove" />
<protection id="resources" action="remove" />
<protection id="rename" />
</rule>
<module path="h01_SonstVerwaltung.dll" />
</project>
当我 运行 命令框代码消失得如此之快以至于我无法读取错误。所以我想我会通过 CommandLine 启动 CLI 看看会发生什么。当我执行以下操作时:
D:\Examples .Net\Diagramm\TEST\Haupt.Projekt\packages\ConfuserEx.Final.1.0.0\tools>Confuser.CLI.exe D:\Examples .Net\Diagramm\TEST\Haupt-Projekt\TEST\bin\x86\Debug\ConfuserEx.crproj
我收到错误
Confuser.Ex.CLI: No output directory specified
st运行ge 的事情是如果我 运行 相同的代码但在 PowerShell 中它工作:
function ObfuscateProjectAssembly
{
[CmdletBinding()]
param()
Utility_AssertValid_FilePath $ConfuserExFilePath
Utility_AssertValid_FilePath $ConfuserExProjectFilePath
if( Test-Path -Path $ObfuscatedAssemblyFilePath ) {
Remove-Item -Path $ObfuscatedAssemblyFilePath
}
& $ConfuserExFilePath -nopause $ConfuserExProjectFilePath
Utility_AssertValid_FilePath $ObfuscatedAssemblyFilePath
}
为什么它适用于 PowerShell 而不适用于 C#。我已经尝试在我的 C# 代码中添加 -n|-noPause 参数。
编辑 我已尝试从我的 C# 代码执行 PowerShell,但仍然出现相同的错误消息。
using (PowerShell PowerShellInstance = PowerShell.Create())
{
PowerShellInstance.AddScript("& (\"" + strConfuserExFilePath + "\") -nopause " + strConfuserExFilePath);
Collection<PSObject> PSOutput = PowerShellInstance.Invoke();
if (PowerShellInstance.Streams.Error.Count > 0)
{
foreach(ErrorRecord er in PowerShellInstance.Streams.Error)
{
}
}
foreach (PSObject outputItem in PSOutput)
{
if (outputItem != null)
{
//System.Diagnostics.Debug.WriteLine(outputItem.BaseObject.GetType().FullName);
System.Diagnostics.Debug.Write(outputItem.BaseObject.ToString() + "\n");
}
}
}
所以我找到了我的问题,这很简单。我忘记了 .crproj 文件周围的 "。
这里是正确的方法: 通过流程排名第一:
p.StartInfo.Arguments = "-nopause \"" + strConfuserExProjectFilePath + "\"";
2 号通过 PowerShell:
PowerShellInstance.AddScript("& \"" + strConfuserExFilePath + "\" -nopause \"" + strConfuserExProjectFilePath + "\"");