调用LPT打印时遇到这个问题File accescc denied,请问怎么解决??网上找了,好像没有可以解决的方法
   Assignfile(f,'LPT1');
  rewrite(f);
  write(f,#$1b'@'); //初始化打印机
  write(f,#$1d'h'#80); //设置条码高度
  write(f,#$1d'k'#2);
  write(f,'496595707379'#0#$a);
  write(f,#$1b#$64#5#$1d'V'#1);//走纸5行,切
  closefile(f);
这打印代码

解决方案 »

  1.   

    1.是否所使用的用户权限太低,用Administrator登录windows再试;
    2.CMOS里设置的并口模式,对比一下,看看是不是有不一致的地方没遇到过,目前只能提供2个参考意见。 另,是否有其他程序运行中?占用了LPT1?
      

  2.   

    另外,看下这篇文章,说是装过某些打印机的驱动也会导致http://support.microsoft.com/kb/180892/EN-US
      

  3.   

    应该是被占用了。下面的代码可以测试是否可用
    var 
    H: THandle; 
    begin 
    H := CreateFile('LPT1',0,0,nil,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,0); 
    if H <> INVALID_HANDLE_VALUE then 
    ShowMessage('可用'); 
    end;有问题的机器上装了打印驱动及其他打印软件吗?
      

  4.   

    那个机器装过打小票的软件,我打算重装系统,你这个代码,我有的用过了,不可用的。
    我现在就是想知道,如果是软件占用了,那我怎么去释放这个端口,难道一台机不能同时两套软件使用LPT口吗?去找了很多资料,都没有提到过
      

  5.   

    貌似放不掉,LPT端口是独占式的,只要没closefile关掉,就一直被占用的。除非对方程序退出,即使没有closefile,系统也能回收。回头再查查看有木有办法放掉。
      

  6.   

    没有报错,就是不能打印,在我自己的一台式机上可以打,换到其它的电脑(连续换了两台)就不行了。打印机是没问题,LPT安装难道还需要什么特殊的方式?我是直接插上去试的,在我自己电脑上就这样可以的。但换到其它电脑就不行了。哎,摸不清楚啊,网上找了,好像没有我这样的情况哦。兄台,你有什么好的建议吗?
      

  7.   

    不需要什么特殊的方式的,啥软件都不装,就应该直接可以打的。
    我记得并口有几种模式,开机进CMOS的时候可以看到的,好像是ECP和SSP什么的,具体哪个是合适的,你看下自己的台式机上配置的是啥,如果别的不一样就改过来就好了。我也没遇到过你这样的情况,我写的那程序也换了n多电脑了,没人说不能用,而且POS程序基本全部都是使用这种方式来处理的。总感觉是并口设置的问题,
      

  8.   

    cmos配置,会进吗?大多数机器都是开机的时候按Delete键,进去后能找到相应的并口配置项,先把你那台正常的机器的并口模式配成什么样的,记录下来,再去看看非正常机器的是否一致。
      

  9.   

    兄台,不好意思又要麻烦你了。我CMOS设置过了,还是不能打印,我在网上找了一个VB做的打印测试结果又是可以的。VB的代码是直接PRINT,有些迷芒了
      

  10.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        Edit1: TEdit;
        Edit2: TEdit;
        Edit3: TEdit;
        Edit4: TEdit;
        Button2: TButton;
        Edit5: TEdit;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    var
        hCommFile : THandle;
        f: TextFile;begin
       hcommFile:=CreateFile('LPT1',generic_write,0,nil,open_existing,file_flag_overlapped,0); //打开串行口
       if hCommFile=INVALID_HANDLE_VALUE then
       begin
          ShowMessage('打印机未正确安装!');
          Exit;
       end;
       Assignfile(f,'LPT1');
       rewrite(f);
       write(f,#$1b'@'); //初始化打印机
       Write(F,Char(27)+char(33)+char(16));   //字体设置
       Writeln(f,StringOfChar(' ',(10-length(Edit1.text)) Div 2)+Edit1.text+StringOfChar(' ',(30-length(Edit2.text)) Div 2)
                +Edit2.text+StringOfChar(' ',(20-length(Edit3.text)) Div 2)+Edit3.text);
    //
       Write(F,Char(27)+char(33)+char(0)+char(13));   //取消字体
       Write(f,'  票价 ¥20.00   服务费 ¥0.00      2场次  ' +char(13)) ;
       Write(f,'  总计 ¥20.00      对号入座               '+char(13) );
       Write(f,'  2011.12.31   15:30        对号入座    '+char(13) );
       write(f,#$1b'@'); //初始化打印机
       write(f,#$1d'h'#80); //设置条码高度
       write(f,#$1d'k'#2);
       write(f,'169111228929'#0#$a+char(13) );      //打印条码
       Writeln(f,'169111228929');
    //
       Writeln(F,chr($1d)+ 'V'+char(66)+chr(1));  //切d纸
       closefile(f);end;end.
      

  11.   

    现在的问题是,只有一台电脑可以打,我试过其它几台,不能打。CMOS设置过了
    也不行