我对您在创建.NET项目时可能在Program.cs中使用的任何常见例程/过程/方法感兴趣.例如,我通常在桌面应用程序中使用以下代码,以便轻松升级,单实例执行以及友好而简单的未捕获系统应用程序错误报告.
using System;
using System.Diagnostics;
using System.Threading;
using System.Windows.Forms;
namespace NameoftheAssembly
{
internal static class Program
{
/// <summary>
/// The main entry point for the application. Modified to check for another running instance on the same computer and to catch and report any errors not explicitly checked for.
/// </summary>
[STAThread]
private static void Main()
{
//for upgrading and installing newer versions
string[] arguments = Environment.GetCommandLineArgs();
if (arguments.GetUpperBound(0) > 0)
{
foreach (string argument in arguments)
{
if (argument.Split('=')[0].ToLower().Equals("/u")) …Run Code Online (Sandbox Code Playgroud) 我正在编写一个url shortener应用程序,我还想用C#创建一个控制台应用程序,将URL推送到我也创建的WCF服务.
WCF应用程序将缩短此URI的URL;
http://example.com/shorten/http://exaple.com
所以我想要的只是那个.
我的控制台exe文件将位于c:\dev文件夹和Windows命令行中,我想这样做;
c:\ dev> myapp -throw http://example.com
用这种方法,我想谈谈这项服务.谈话部分没有问题.但问题是如何在命令行上提供这个-throw的东西并获得响应并将该响应放在命令行上并提供一种方法将其复制到剪贴板.我在这里问得太多了吗?:SI不知道.
你能指点一下我能找到相关信息吗?或者你可以给我一个示例代码吗?
谢谢.
编辑: 我尝试了以下代码;
class Program {
static void Main(string[] args) {
if (args[0] == "-throw") {
System.Windows.Forms.Clipboard.SetDataObject(args[1]);
Console.WriteLine(args[1] + " has been added to clipboard !");
Console.ReadLine();
}
}
}
Run Code Online (Sandbox Code Playgroud)
我收到了以下错误;
C:\ Apps\ArgsTry\ArgsTry\bin\Debug> ArgsTry -throw man
未处理的异常:System.Threading.ThreadStateException:在进行OLE调用之前,必须将当前线程设置为单线程单元(STA)模式.确保您的Main函数标记了STAThreadAttribute.在System.Windows.Forms.Clipboard.SetDataObject(对象数据,布尔副本,在t32 retryTimes,Int32 retryDelay中)位于ArgsTry.Program.Main(String [] args)的System.Windows.Forms.Clipboard.SetDataObject(Object data)在c:\ apps\ArgsTry\ArgsTry\Program.cs:第14行
C:\ APPS\ArgsTry\ArgsTry\BIN \调试>
可以使用以下内容在c#中运行命令行:
process = new Process();
process.StartInfo.FileName = command;
process.Start();
Run Code Online (Sandbox Code Playgroud)
问题是如果命令字符串包含参数,例如:
C:\My Dir\MyFile.exe MyParam1 MyParam2
Run Code Online (Sandbox Code Playgroud)
这不起作用,我不知道如何从该字符串中提取参数并在process.Arguments属性上设置它?路径和文件名可能是其他东西,文件不必结束exe.
我怎么解决这个问题?
我对c#还是很陌生,所以你必须忍受我.
我开发了一个Windows窗体程序,它将一些SQL记录更新为我们客户的一天结束过程.
下一步是我需要在服务器上安装程序并模拟程序中的按钮单击以成为计划任务.
我知道如何在服务器端设置启动程序的任务并输入参数.但我不确定我需要在我的程序中包含哪些代码来实现这一目标.
我希望我的控制台应用程序使用连字符命名的输入,如下所示:
myApp -S "myServerName" -D "myDatabaseName"
Run Code Online (Sandbox Code Playgroud)
而不是通常的:
myApp "myServerName" "myDatabaseName"
Run Code Online (Sandbox Code Playgroud)
我认为第一个对于想要将来使用我的控制台应用程序的开发人员更友好。我想我不知道这种类型的输入叫什么,否则我会在谷歌上找到它。
我怎样才能找到这些信息:
我认为我们开始了这个过程:
testFile.exe i- 100 k- "hello" j-"C:\" "D:\Images" f- "true"
Run Code Online (Sandbox Code Playgroud)
现在,当应用程序启动时,我如何获得主要参数,所以我有:
int i = ... ; //i will be 100
string k = ... ; // k = hello
string[] path = ... ; // = path[0] = "C:\" , path[1] = "D:\Images"
bool f = ... ; // f = true;
Run Code Online (Sandbox Code Playgroud)
问候
我对命令行参数以及如何使用它们非常熟悉,但是我以前从未处理过选项(或标志)。我指的是以下内容:
$ sort -f -s -u letters.txt
Run Code Online (Sandbox Code Playgroud)
在上面的bash脚本示例中,我们有3个选项或标志,后跟常规参数。我想在C#应用程序中做类似的事情。处理以以下形式给出参数的命令行选项的最佳方法是什么?
$ prog [-options] [args...]
Run Code Online (Sandbox Code Playgroud) 许多命令行实用程序使用参数,例如:
gacutil /i MyDLL.dll
Run Code Online (Sandbox Code Playgroud)
要么
regasm /tlb:MyDll.tlb MyDll.dll
Run Code Online (Sandbox Code Playgroud)
如何建立一个.NET控制台应用程序采取命令行参数和,其次,你怎么可以模拟处理"选项"参数,如/i与/tlb:在上述各例子吗?
我想使用空格作为我的分隔符来拆分字符串,但如果有多个单词用双引号或单引号括起来,那么我希望它们作为一个项返回.
例如,如果输入字符串是:
CALL "C:\My File Name With Space" /P1 P1Value /P1 P2Value
输出数组将是:
Array[0]=Call
Array[1]=C:\My File Name With Space
Array[2]=/P1
Array[3]=P1Value
Array[4]=/P1
Array[5]=P2Value
Run Code Online (Sandbox Code Playgroud)
你如何使用正则表达式来做到这一点?我意识到有命令行解析器.我粗略地看了一下流行的一个,但它没有处理你可以有多个具有相同名称的参数的情况.无论如何,而不是学习如何使用命令行解析库(将其留在另一天).我有兴趣更多地了解RegEx功能.
你会如何使用RegEx函数来解析它?
对不起,我真的不能谷歌这个,因为我不知道如何恰当地说几句.
但基本上我想要通过dos或快捷方式打开你的程序,如下所示:
"c:\ program.exe"value1 value2
我的应用程序将能够使用这些值.但是当我没有输入值时,我的应用程序仍然可以正常运行.
我希望我在这里想说的是有道理的
任何帮助都会得到赞赏