小编Che*_*eso的帖子

如何从CMD.exe切换到Powershell?

我有这个想法,我应该从cmd.exe切换到powershell.它比经过试验和测试的cmd.exe强大得多.它是Windows的未来之壳.

但与powersd.exe相比,我在powershell中的设施非常有限.在每个角落,我发现了另一个看似无法克服的小障碍.

今天我尝试使用ctrl-C来停止正在运行的程序,在PowerShell中,它没有任何效果.??
上次通过它是"如何在powershell中做一个'dir/o'?" 我知道如何在.cmd脚本中进行循环,我如何在PowerShell中执行此操作?

我需要一些建议:首先,尝试切换到PowerShell是个好主意吗?

如果是这样,问题2是:您对如何打破cmd.exe习惯的建议是什么?

  • 我应该将每个问题发布到Stackoverflow吗?
  • 我应该花一整天时间学习PowerShell吗?我可以参加一个培训课程吗?
  • 有一个很好的常见powershell食谱的食谱?我可以摄取一个powershell wiki吗?

windows powershell cmd

19
推荐指数
2
解决办法
1万
查看次数

是否可以构建一个双击时不显示控制台窗口的控制台应用程序?

相关:
我应该在我的应用程序中包含命令行模式吗?
如何获取父进程标准输出?
控制台应用程序可以检测它是否已从资源管理器运行?

我想构建一个控制台应用程序,通常从命令行运行.

但是,当它从资源管理器中双击(而不是从cmd.exe提示符运行)时,我希望该程序不显示控制台窗口.

我想避免这个:

替代文字http://i36.tinypic.com/1088p5s.jpg

可能吗?

编辑我想另一种问题是,程序是否有可能知道它是如何被调用的 - 无论是通过双击还是通过命令行

我在Windows上使用.NET.

编辑2:这篇Old New Thing博客文章中我学到了一些好东西.这就是我现在所知道的......

在Windows中,EXE文件标记为GUI或非GUI.使用csc.exe,可以使用/target:winexe或选择它/target:exe.在执行流程中的第一条指令之前,Windows内核会设置执行环境.此时,如果EXE标记为GUI,则内核将进程的stdin/stdout设置为NULL,如果非GUI(命令行),则内核创建控制台并将进程的stdin/stdout设置为安慰.

启动进程时,如果没有stdin/stdout(== /target:winexe),则立即返回调用.因此,从cmd.exe启动gui应用程序,您将立即返回cmd提示符.如果存在stdin/stdout,并且从cmd.exe运行,则父cmd.exe将等待进程退出.

"立即返回"很重要,因为如果您编写GUI应用程序以附加到其父控制台,您将能够执行console.writeline等.但cmd.exe提示是活动的.用户可以键入新命令,启动新进程等.换句话说,从winexe,只需附加到父控制台,AttachConsole(-1)不会"变成"控制台应用程序.


此时我认为允许应用程序使用控制台的唯一方法是从cmd.exe调用它,而不是在双击时使用它,就是将exe定义为常规控制台exe(/target:exe),并且如果合适,在启动时隐藏窗口.您仍然会暂时显示控制台窗口.

我仍然没有想过如何知道它是从explorer或cmd.exe启动的,但我越来越近了..


解答

无法构建不显示控制台窗口的控制台应用程序.

是可能的构建非常迅速隐藏其窗口控制台应用程序,但不能如此之快,这是因为如果从来没有出现的窗口.

现在,为了确定是否从资源管理器启动了一个控制台应用程序,有些人建议查看它正在运行的控制台
(来自mgb的答案知识库文章99115):

  int left = Console.CursorLeft;
  int top = Console.CursorTop;
  bool ProcessWasRunFromExplorer = (left==0 && top==0);
Run Code Online (Sandbox Code Playgroud)

这告诉您该进程是否在其自己的控制台中启动,而不是它是否是资源管理器.在资源管理器中双击可以执行此操作,但是应用程序内的Start.Process()也会执行相同的操作.

如果要以不同方式处理这些情况,请使用此方法来了解父进程的名称:

  System.Console.WriteLine("Process id: {0}", Process.GetCurrentProcess().Id);
  string name = Process.GetCurrentProcess().ProcessName ;
  System.Console.WriteLine("Process name: {0}", …
Run Code Online (Sandbox Code Playgroud)

.net windows console console-application

19
推荐指数
3
解决办法
8026
查看次数

如何在VBScript中获取文件的完全限定路径?

我正在使用该Shell.Application对象,它允许我编写zip文件的脚本.

但为了使其工作,我需要完整的zip文件路径. File.zip不起作用.c:\the\full\path\file.zip即使脚本在找到文件的同一目录中运行,我也需要.

如何在VBScript中获取文件的完整路径?

类似于%~fIcmd.exe shell中的扩展.

vbscript path

19
推荐指数
2
解决办法
8万
查看次数

HTTP URI可以有非ASCII字符吗?

我试图在相关的RFC,IETF RFC 3986中找到它,但无法弄清楚.

HTTP的URI是否允许Unicode或任何类型的非ASCII?

您能否引用支持您答案的部分和RFC.

注意:对于那些可能认为这与编程不相关的人来说 - 确实如此.它与我正在构建的ISAPI过滤器有关.


附录

我已经阅读了RFC 3986的第2.5节.但是RFC 2616,我认为是当前的HTTP协议,早于3986,因此我认为它不能与3986兼容.此外,即使或当HTTP RFC更新后,仍然存在合理化问题 - 换句话说,HTTP URI是否支持所有RFC3986条款,包括哪些适合包含非US-ASCII字符?

unicode http isapi rfc3986

19
推荐指数
2
解决办法
7478
查看次数

在哪里可以找到.csproj文件的架构(XSD)?

对于Visual Studio 2008,我在哪里可以找到.csproj文件的W3C XML Schema(XSD)?

看起来这应该是显而易见的,但我花了一些时间而没有找到一个.

我看了%VS2008%\ xml\Schemas,没有快乐.没有喜欢搜索'管.

xsd visual-studio-2008 visual-studio

18
推荐指数
3
解决办法
9248
查看次数

如何通过COM互操作在.NET对象上调用静态方法?

是否可以通过COM互操作在.NET对象上调用静态方法?

我知道我可以写一个包装类.如果我不想那样做怎么办?

.net com interop com-interop

18
推荐指数
1
解决办法
2086
查看次数

在Firebug"脚本"菜单中看不到任何脚本

我为我的网站启用了Firebug的scipts.

但我在Script dropdwon菜单中看不到任何内容.

"网络"选项卡将它们列为"确定".

我试过另一个网站不是我同样的事情?

firebug

17
推荐指数
3
解决办法
2万
查看次数

在脚本中使用重定向会生成unicode输出.如何发出单字节ASCII文本?

我正在使用Sandcastle Helpfile Builder生成一个帮助文件(.chm).该项目是一个.shfbproj文件,它是XML格式,与msbuild一起使用.

我想自动更新生成的.chm文件中显示的页脚文本.我用这个片段:

$newFooter = "<FooterText>MyProduct v1.2.3.4</FooterText>";

get-content  -Encoding ASCII $projFile.FullName | 
    %{$_ -replace '<FooterText>(.+)</FooterText>', $newFooter } > $TmpFile

move-item $TmpFile $projFile.FullName -force
Run Code Online (Sandbox Code Playgroud)

定向到$ TmpFile的输出始终是一个多字节字符串.但我不希望这样.如何将输出的编码设置为ASCII?

unicode powershell

17
推荐指数
3
解决办法
9444
查看次数

如何启用speedbar以显示所有类型的文件?

我在ubuntu 9.10上有emacs v23.1.1.我似乎无法使speedbar显示所有文件,它只显示目录.有没有人对此有所了解?

emacs emacs-speedbar

17
推荐指数
1
解决办法
5260
查看次数

我可以在Visual Studio中的单个项目中混合使用C++和C吗?

我在VS2008中有一个Win32 DLL项目,它是用少数几个C模块编写的.
因为我希望能够在VS2008外部构建,而不依赖于VS2008,所以我制作了一个自定义makefile,它可以完成所有构建和链接步骤.这一切都设置得很好.

现在我想为这个DLL添加几个C++模块.我修改了自定义makefile以将.cpp模块编译为C++,将.c模块编译为常规C(/ Tc).这一切都有效.它把所有东西连在一起,没问题.

我可以配置VS2008项目吗?

我可以在同一个VS2008项目中混合C++和C吗?

或者我需要一个自定义构建步骤吗?

谢谢.


回答

我将VS2008项目设置为C编译.我需要将其更改为Compile As"Default".右键单击项目,选择"属性",然后选择......:

alt text http://i33.tinypic.com/qqsd8g.jpg

谢谢,帕维尔.

c c++ winapi visual-studio-2008

16
推荐指数
2
解决办法
2万
查看次数